<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>GPU on Hullabalooing</title>
    <link>https://cruver.ai/categories/gpu/</link>
    <description>Recent content in GPU on Hullabalooing</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Wed, 21 Jan 2026 00:00:00 -0700</lastBuildDate>
    <atom:link href="https://cruver.ai/categories/gpu/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ComfyUI on MI60</title>
      <link>https://cruver.ai/gpu-ai/posts/comfyui-mi60/</link>
      <pubDate>Wed, 21 Jan 2026 00:00:00 -0700</pubDate>
      <guid>https://cruver.ai/gpu-ai/posts/comfyui-mi60/</guid>
      <description>&lt;p&gt;Node-based Stable Diffusion UI with AMD MI60 GPU acceleration via ROCm.&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;a class=&#34;anchor&#34; href=&#34;#overview&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;ComfyUI runs as a containerized service using a custom ROCm 5.7 image built for the MI60&amp;rsquo;s gfx906 architecture. It can run standalone on both GPUs or alongside vLLM in the &lt;code&gt;image-chat&lt;/code&gt; configuration.&lt;/p&gt;&#xA;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;a class=&#34;anchor&#34; href=&#34;#quick-start&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#78787e&#34;&gt;# Build the container image&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff5c57&#34;&gt;cd&lt;/span&gt; comfyui&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#78787e&#34;&gt;# Start ComfyUI (standalone, both GPUs)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#78787e&#34;&gt;# Or use the image-chat config (vLLM on GPU0, ComfyUI on GPU1)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X POST -H &lt;span style=&#34;color:#5af78e&#34;&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#5af78e&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -d &lt;span style=&#34;color:#5af78e&#34;&gt;&amp;#39;{&amp;#34;config&amp;#34;:&amp;#34;image-chat&amp;#34;}&amp;#39;&lt;/span&gt; http://localhost:9100/switch&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Access the UI at &lt;a href=&#34;http://localhost:8188&#34;&gt;http://localhost:8188&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU Configuration Management</title>
      <link>https://cruver.ai/gpu-ai/posts/gpu-config-management/</link>
      <pubDate>Wed, 21 Jan 2026 00:00:00 -0700</pubDate>
      <guid>https://cruver.ai/gpu-ai/posts/gpu-config-management/</guid>
      <description>&lt;p&gt;Dynamic switching between GPU configurations based on workload needs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;a class=&#34;anchor&#34; href=&#34;#overview&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Rather than running a single fixed configuration, I dynamically switch between GPU configurations. A Python service manages the transitions via HTTP API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;available-configurations&#34;&gt;Available Configurations&lt;a class=&#34;anchor&#34; href=&#34;#available-configurations&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Config&lt;/th&gt;&#xA;          &lt;th&gt;Model&lt;/th&gt;&#xA;          &lt;th&gt;Use Case&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;big-chat&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Llama 3.3 70B (TP=2)&lt;/td&gt;&#xA;          &lt;td&gt;Maximum quality chat&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;coder&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Qwen3 32B (TP=2)&lt;/td&gt;&#xA;          &lt;td&gt;Coding tasks with thinking mode&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;dual-chat&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Qwen3 8B + 14B&lt;/td&gt;&#xA;          &lt;td&gt;Two models, different tasks&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;image-chat&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Qwen 7B + ComfyUI&lt;/td&gt;&#xA;          &lt;td&gt;Text + image generation&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Configuration files are stored as compose YAML files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU Metrics and Monitoring</title>
      <link>https://cruver.ai/gpu-ai/posts/gpu-metrics-monitoring/</link>
      <pubDate>Wed, 21 Jan 2026 00:00:00 -0700</pubDate>
      <guid>https://cruver.ai/gpu-ai/posts/gpu-metrics-monitoring/</guid>
      <description>&lt;p&gt;Prometheus metrics and Grafana dashboards for GPU health and state monitoring.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prometheus-metrics&#34;&gt;Prometheus Metrics&lt;a class=&#34;anchor&#34; href=&#34;#prometheus-metrics&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;code&gt;gpu-state-service&lt;/code&gt; exposes Prometheus metrics on port 9100:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# GPU state and configuration&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gpu_config_info{config=&amp;#34;big-chat&amp;#34;,model=&amp;#34;llama-3.3-70b&amp;#34;} 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gpu_state_info{state=&amp;#34;ready&amp;#34;} 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gpu_ready 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gpu_config_switches_total 5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gpu_config_uptime_seconds 3600&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Temperature monitoring (from separate AMD GPU exporter on port 9101)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;amd_gpu_temperature_junction_celsius{gpu=&amp;#34;0&amp;#34;} 72&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;amd_gpu_temperature_junction_celsius{gpu=&amp;#34;1&amp;#34;} 75&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;amd_gpu_utilization_percent{gpu=&amp;#34;0&amp;#34;} 85&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;amd_gpu_power_watts{gpu=&amp;#34;0&amp;#34;} 180&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;prometheus-endpoints&#34;&gt;Prometheus Endpoints&lt;a class=&#34;anchor&#34; href=&#34;#prometheus-endpoints&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Port&lt;/th&gt;&#xA;          &lt;th&gt;Service&lt;/th&gt;&#xA;          &lt;th&gt;Metrics&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;9100&lt;/td&gt;&#xA;          &lt;td&gt;gpu-state-service&lt;/td&gt;&#xA;          &lt;td&gt;Config state, switches, uptime&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;9101&lt;/td&gt;&#xA;          &lt;td&gt;AMD GPU exporter&lt;/td&gt;&#xA;          &lt;td&gt;Temperature, utilization, power&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;9102&lt;/td&gt;&#xA;          &lt;td&gt;NVIDIA GPU exporter&lt;/td&gt;&#xA;          &lt;td&gt;RTX 2080 metrics (if present)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;temperature-alerts&#34;&gt;Temperature Alerts&lt;a class=&#34;anchor&#34; href=&#34;#temperature-alerts&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The service monitors junction temperatures and sends ntfy notifications:&lt;/p&gt;</description>
    </item>
    <item>
      <title>MI60 Hardware Setup</title>
      <link>https://cruver.ai/gpu-ai/posts/mi60-hardware-setup/</link>
      <pubDate>Wed, 21 Jan 2026 00:00:00 -0700</pubDate>
      <guid>https://cruver.ai/gpu-ai/posts/mi60-hardware-setup/</guid>
      <description>&lt;p&gt;How to get an AMD Instinct MI60 running for AI workloads, including cooling solutions, BIOS settings, and fan control.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;a class=&#34;anchor&#34; href=&#34;#introduction&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The AMD Instinct MI60 is a powerful server GPU featuring 32 GB of HBM2 VRAM and PCIe 3.0 connectivity. It remains a good choice for budget-conscious AI developers looking for high VRAM capacity at a fraction of modern GPU prices. With proper setup, the MI60 can handle local LLM inference, Whisper transcription, Stable Diffusion, and other workloads.&lt;/p&gt;</description>
    </item>
    <item>
      <title>vLLM Inference on MI60</title>
      <link>https://cruver.ai/gpu-ai/posts/vllm-inference-mi60/</link>
      <pubDate>Wed, 21 Jan 2026 00:00:00 -0700</pubDate>
      <guid>https://cruver.ai/gpu-ai/posts/vllm-inference-mi60/</guid>
      <description>&lt;p&gt;Production inference using vLLM with tensor parallelism across dual MI60 GPUs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-vllm&#34;&gt;Why vLLM?&lt;a class=&#34;anchor&#34; href=&#34;#why-vllm&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After evaluating Ollama, llama.cpp, and vLLM for MI60 inference, &lt;strong&gt;vLLM&lt;/strong&gt; emerged as the best choice:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tensor Parallelism&lt;/strong&gt;: Native support for splitting large models across multiple GPUs. With dual MI60s (64GB total), I can run 70B parameter models that wouldn&amp;rsquo;t fit on a single GPU.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;PagedAttention&lt;/strong&gt;: More efficient memory management, allowing higher GPU utilization (90%) without OOM errors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running Claude Code with Local LLMs via vLLM and LiteLLM</title>
      <link>https://cruver.ai/gpu-ai/posts/claude-code-local-llms-1768966311/</link>
      <pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://cruver.ai/gpu-ai/posts/claude-code-local-llms-1768966311/</guid>
      <description>&lt;p&gt;Every query to Claude Code means sending my source code to Anthropic&amp;rsquo;s servers. For proprietary codebases, that&amp;rsquo;s a non-starter. With vLLM and LiteLLM, I can point Claude Code at my own hardware - keeping my code on my network while maintaining the same workflow.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-architecture&#34;&gt;The Architecture&lt;a class=&#34;anchor&#34; href=&#34;#the-architecture&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The trick is that Claude Code expects the Anthropic Messages API, but local inference servers speak OpenAI&amp;rsquo;s API format. LiteLLM bridges this gap. It accepts Anthropic-formatted requests and translates them to OpenAI format for my local vLLM instance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An Affordable AI Server</title>
      <link>https://cruver.ai/gpu-ai/posts/an-affordable-ai-server-1768704467/</link>
      <pubDate>Sat, 17 Jan 2026 00:00:00 -0700</pubDate>
      <guid>https://cruver.ai/gpu-ai/posts/an-affordable-ai-server-1768704467/</guid>
      <description>&lt;p&gt;Two AMD MI60s from eBay cost me about $1,000 total and gave me 64GB of VRAM. That&amp;rsquo;s enough to run Llama 3.3 70B at home with a 32K context window.&lt;/p&gt;&#xA;&lt;p&gt;When I started looking into running large language models locally, the obvious limiting factor was VRAM. Consumer GPUs top out at 24GB, and that&amp;rsquo;s on an RTX 4090 at the high end. I wanted to run 70B parameter models locally, on hardware I own.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
