<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Open WebUI on Wojciech Marusiak IT Blog</title>
        <link>https://www.wojcieh.net/tags/open-webui/</link>
        <description>Recent content in Open WebUI on Wojciech Marusiak IT Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Wed, 09 Sep 2026 10:00:00 +0200</lastBuildDate><atom:link href="https://www.wojcieh.net/tags/open-webui/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Running Heavyweight LLMs on Google Cloud Run: 96GB VRAM, vLLM &amp; Pure BF16 Inference</title>
        <link>https://www.wojcieh.net/running-heavyweight-llms-cloud-run-vllm-96gb-vram/</link>
        <pubDate>Wed, 09 Sep 2026 10:00:00 +0200</pubDate>
        
        <guid>https://www.wojcieh.net/running-heavyweight-llms-cloud-run-vllm-96gb-vram/</guid>
        <category>vLLM</category>
        <category>Cloud Run</category>
        <category>GPU</category>
        <category>NVIDIA</category>
        <category>BF16</category>
        <category>Cloud Scheduler</category>
        <category>Hermes Agent</category>
        <category>Open WebUI</category>
        <category>AI &amp; LLM Ops</category>
        <category>Google Cloud</category>
        <description>&lt;p&gt;&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2026/09/cloud-run-vllm-96gb-gpu.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Running Heavyweight LLMs on Google Cloud Run with 96GB VRAM and vLLM&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Deploying large language models in homelab and private cloud setups usually forces a tough tradeoff: invest thousands in dedicated, power-hungry local hardware, or settle for 4-bit/5-bit GGUF quantizations that degrade reasoning depth and break structured tool calling.&lt;/p&gt;
&lt;p&gt;In this post, I cover a different architecture: running high-performance &lt;strong&gt;vLLM&lt;/strong&gt; inference on &lt;strong&gt;Google Cloud Run&lt;/strong&gt; with physical &lt;strong&gt;NVIDIA RTX PRO 6000 GPUs&lt;/strong&gt; and &lt;strong&gt;96 GB of GDDR7 VRAM&lt;/strong&gt;, paired with automated &lt;strong&gt;Cloud Scheduler&lt;/strong&gt; scaling to keep monthly costs in check.&lt;/p&gt;
&lt;h2 id=&#34;why-96gb-vram-matters-bf16-vs-gguf&#34;&gt;Why 96GB VRAM Matters (BF16 vs. GGUF)
&lt;/h2&gt;&lt;p&gt;For years, running 27B, 35B, or 70B models locally required aggressive 4-bit or 5-bit quantizations to squeeze weights into 16GB or 24GB consumer cards (like RTX 3090/4090). While quantization is great for casual chat, it introduces concrete drawbacks in autonomous agent workflows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Degraded function-calling precision:&lt;/strong&gt; 4-bit models frequently hallucinate JSON schemas or miss parameters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distillation loss:&lt;/strong&gt; Fine-tuned reasoning paths in abliterated models suffer accuracy drops under heavy compression.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KV-cache choking:&lt;/strong&gt; Ingesting 32K or 64K tokens for codebase analysis exhausts remaining VRAM instantly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Configuring Cloud Run with the &lt;code&gt;nvidia-rtx-pro-6000&lt;/code&gt; accelerator gives direct access to &lt;strong&gt;96 GB of GDDR7 VRAM&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-----------------------------------------------------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| NVIDIA-SMI 570.86.10              Driver Version: 570.86.10   CUDA: 12.8    |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;|-----------------------------------+--------------------+--------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| GPU  Name           Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;|                                   |                    |               MIG M. |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;|===================================+====================+====================|
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;|   0  NVIDIA RTX PRO 6000 ...   Off | 00000000:00:04.0 Off |                  0 |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| N/A   34C    P8              31W / 300W |   71850MiB / 98304MiB |      0%      Default |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-----------------------------------+--------------------+--------------------+
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;With 96 GB VRAM:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Raw BF16 Weights:&lt;/strong&gt; A 27B model (like &lt;code&gt;Qwen3.8-27B-abliterated&lt;/code&gt;) takes ~52 GB in uncompressed 16-bit precision with zero quantization artifacts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Massive KV-Cache:&lt;/strong&gt; Over 40 GB remains free purely for the KV-cache, effortlessly handling 65K context windows across concurrent requests.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-vllm-deployment-on-cloud-run&#34;&gt;The vLLM Deployment on Cloud Run
&lt;/h2&gt;&lt;p&gt;We serve vLLM via Google Cloud Run with direct GCS FUSE mounting for model weights:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gcloud run deploy gpu-vllm-service &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --image&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;vllm/vllm-openai:latest &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --region&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;europe-west4 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --execution-environment&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gen2 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --no-cpu-throttling &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --min-instances&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --max-instances&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --gpu&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --gpu-type&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nvidia-rtx-pro-6000 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --cpu&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;24&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --memory&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;90Gi &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --set-env-vars&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;VLLM_ENABLE_CUDA_COMPATIBILITY=1&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --add-volume&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;model-weights,type&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;cloud-storage,bucket&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wojciech-genai-vllm-models &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --add-volume-mount&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;volume&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;model-weights,mount-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/models &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --command&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vllm&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --args&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;serve,/models/qwen3.8-27b,--tensor-parallel-size=1,--max-model-len=65536,--enforce-eager,--enable-auto-tool-choice,--tool-call-parser=hermes&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;why---enable-auto-tool-choice----tool-call-parserhermes&#34;&gt;Why &lt;code&gt;--enable-auto-tool-choice&lt;/code&gt; &amp;amp; &lt;code&gt;--tool-call-parser=hermes&lt;/code&gt;?
&lt;/h3&gt;&lt;p&gt;These two flags are critical for our architecture because this vLLM instance serves as the primary backend for &lt;strong&gt;Hermes Agent&lt;/strong&gt; (our autonomous assistant running on Cloud Run with Telegram integration).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--enable-auto-tool-choice&lt;/code&gt;&lt;/strong&gt;: OpenAI-compatible client libraries and agent frameworks send &lt;code&gt;tool_choice: &amp;quot;auto&amp;quot;&lt;/code&gt; with every request. By default, standard vLLM rejects requests containing &lt;code&gt;tool_choice&lt;/code&gt; with a &lt;code&gt;400 Bad Request&lt;/code&gt; unless explicitly enabled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--tool-call-parser=hermes&lt;/code&gt;&lt;/strong&gt;: Hermes Agent uses a specific token format for multi-tool execution. This flag tells vLLM&amp;rsquo;s internal parser to extract structured function arguments directly from model outputs into standard OpenAI tool calls without requiring external regex wrappers.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;cost-control-automated-scheduling-0800--2300&#34;&gt;Cost Control: Automated Scheduling (08:00 – 23:00)
&lt;/h2&gt;&lt;p&gt;Running a dedicated high-end GPU 24/7 costs around &lt;strong&gt;$944/month&lt;/strong&gt;. For homelab development and personal workflows, paying for compute while you sleep is unnecessary.&lt;/p&gt;
&lt;p&gt;We solve this with two &lt;strong&gt;Cloud Run Jobs&lt;/strong&gt; triggered by &lt;strong&gt;Google Cloud Scheduler&lt;/strong&gt; to scale &lt;code&gt;--min-instances&lt;/code&gt; automatically:&lt;/p&gt;
&lt;h3 id=&#34;1-the-scaling-jobs&#34;&gt;1. The Scaling Jobs
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Job to scale up in the morning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gcloud run &lt;span class=&#34;nb&#34;&gt;jobs&lt;/span&gt; create scale-vllm-up &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --image&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;google/cloud-sdk:slim &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --region&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;europe-west4 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --command&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gcloud&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --args&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;run,services,update,gpu-vllm-service,--min-instances=1,--region=europe-west4,--quiet&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Job to scale to zero at night&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gcloud run &lt;span class=&#34;nb&#34;&gt;jobs&lt;/span&gt; create scale-vllm-down &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --image&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;google/cloud-sdk:slim &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --region&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;europe-west4 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --command&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gcloud&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --args&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;run,services,update,gpu-vllm-service,--min-instances=0,--region=europe-west4,--quiet&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;2-cloud-scheduler-cron-setup&#34;&gt;2. Cloud Scheduler Cron Setup
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Morning warm-up at 08:00 (Europe/Warsaw)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gcloud scheduler &lt;span class=&#34;nb&#34;&gt;jobs&lt;/span&gt; create http vllm-scale-up-morning &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --location&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;europe-west4 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --schedule&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0 8 * * *&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --time-zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Europe/Warsaw&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --uri&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://europe-west4-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/wojciech-genai/jobs/scale-vllm-up:run&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --http-method&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;POST &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --oauth-service-account-email&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;scheduler-runner@wojciech-genai.iam.gserviceaccount.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Night shutdown at 23:00 (Europe/Warsaw)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gcloud scheduler &lt;span class=&#34;nb&#34;&gt;jobs&lt;/span&gt; create http vllm-scale-down-night &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --location&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;europe-west4 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --schedule&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0 23 * * *&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --time-zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Europe/Warsaw&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --uri&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://europe-west4-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/wojciech-genai/jobs/scale-vllm-down:run&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --http-method&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;POST &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --oauth-service-account-email&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;scheduler-runner@wojciech-genai.iam.gserviceaccount.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;the-architecture-benefit-for-hermes-agent&#34;&gt;The Architecture Benefit for Hermes Agent:
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cost Optimization in Hermes:&lt;/strong&gt; Rather than paying for dedicated GPU infrastructure 24/7, Hermes Agent is configured with multi-engine intelligence. It routes daytime engineering tasks (08:00–23:00) to our dedicated vLLM instance running unquantized BF16 weights on the RTX PRO 6000, cutting GPU spend from &lt;strong&gt;$944/month&lt;/strong&gt; down to &lt;strong&gt;~$550/month&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automated Nighttime Failover:&lt;/strong&gt; During the night window (23:00–08:00) when the GPU scales to zero, Hermes Agent automatically fails over to Google Vertex AI using &lt;strong&gt;&lt;code&gt;gemini-3.7-flash&lt;/code&gt;&lt;/strong&gt;. This guarantees 24/7 agent availability on Telegram for quick queries and alert notifications without keeping an idle GPU running.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the next post, we will dive deep into deploying &lt;strong&gt;Hermes Agent&lt;/strong&gt; on Cloud Run with Telegram integration and persistent GCS state storage.&lt;/p&gt;</description>
        </item>
        
    </channel>
</rss>
