【令和最新版】ローカル深層学習推論マシンを組む

経緯

クラウドGPUマシン(AI推論を行わせるサーバー)を動かすことでビジネスになるようになった。
ただし推論のみなので普通にゲーミングPCにUbuntuを入れるだけです。

構成

  • CPU/MBは余っていたi5-12400F/Asrock B660M-ITX(AldarLake世代)を使いまわし
    • メモリは64GBを調達(Crucialの安い32GBを2枚で1.7万)
  • ケースはDeepCool CH-160
    • ツクモで箱ボロアウトレット税込み7,000円。電源ケーブルが外だし(プラグが筐体に付かない)な所以外は安い割に軽くて良い
    • 305mmまでのグラボが入る。(5070Tiや9070XTなどのミドル級のグラボが刺さるケースが欲しかった)
      • これは今回の構築の中では積極的な妥協で、「最悪持ち運べる」事を想定して小型軽量、かつハンドル付きのケースを選んだ。
      • そのトレードオフとして、ハイエンドグラボの中でも比較的小型なGPUを選択する必要がある
        • 例えばRTX5070TiやRX9070XTの中でも、グレードによってカード長が290mm~320mm越えとバラつきがあり、廉価グレードのGPUを選ぶ必要がある
        • ただ高性能GPUほど比較して数万円のコストの違いが出るので、安いのでええやん?という気持ちではいる
  • 電源やファンはJD.comのThermalrightストアから個人輸入
    • SFXの高出力電源としては最安クラス(しかもATX3.1世代)のSGFX-850を購入。地雷かどうかは不明。
      • SGFX-650もあるが100元(2,000円)違いという所と、300W級のグラボをAI推論で使う(基本的に実行中はフルロード)と考えるとシステム全体でスパイク時の余裕を考えて850Wにする。
    • ケースファンは12cm x 2.8cm高の低出力タイプのTL-C12CW-X28を2個。
JD.com参考価格。送料込みで2万円くらい。

JDからの個人輸入は金額によって商品受け取り時にUPSから関税(輸入消費税)の請求がある。
この購入では関税の請求はありませんでした。私の理解では小売価格の6掛けが1万円に満たない場合は掛からない。この例だと700元<16,667円なので掛からず、という理解。

GPUどうするか問題

今回の構成的にはメモリ16GB/最新世代/TDP300W前後という所でRTX5070TiかRX9070XTという事になる。
今回のケースの適合GPUのサイズは長さ305mm未満に限定されているので、その条件に基づくと

  • ASRock RX9070XT SL 16G (298mm)
    • ASRockならChallengerグレードも290mm
  • Sapphire -> 非該当
  • ASUS -> 非該当
  • パワカラ -> 末尾L=>ヘルハウンド。Reaperグレードが304mmだけど、見た限りではPC工房の抽選リストにすら載ってないので日本に入ってこない可能性あり
  • 玄人志向 -> 不明
  • GIGABYTE -> GAMINGグレードなら288mm

なので、ASRockかGIGABYTEを買う、という事になる。

完成

結局調達できたのはRX9070(非XT)だった。

導入アプリ

  • FaceFusion
  • SD.Next
  • ComfyUI

WebUIを持つフレームワークを3種類設置する。
各種ともDaemon化して、systemctlで起動/停止を組めるようにして、リバースプロキシでNginxからそれぞれ自宅のIPアドレスにルートされるDNSからルートされるようにする。

自宅サーバー側ではLet’s EncryptでDNS-01チャレンジのTLS証明書を取得(自動更新)するようにしておいて、Nginx側ではワイルドカード(*.xxx.com)でhttpsをリッスンしつつ、ホスト名によってリバースプロキシ先をルーティングするといった仕組みにする。なおかつ、NginxではBasic認証を入れることで、意図しないユーザーからのアクセスを防ぎます。

各種WebUIは暖機運転で若干のVRAMを確保してしまうようなので、各種WebUIサービスはリモートからSSHして手動で停止/再開をコントロールする。

こんな感じで、自宅推論サーバーを運用しています。

RX9070のROCm(HIP)が遅い問題

2025年3月現在のROCm最新版(6.3.4)では、現状RX9070のパフォーマンスをほとんど活かせていない、という問題があります。(このへんのIssueが関連)
それを解決するHIP BLASLtのチューニングが3/14にマージされているので、ROCm6.4が正式リリースされればその差分が反映されたビルドを利用できるかもしれない。

https://repo.radeon.com/amdgpu-install/.6.4/ubuntu/noble/

noble(Ubuntu24.x)用のROCm6.4のベータ版が3/25にアップロードされているので一柱覚悟でインストールしてみる。

nginx.conf

client_max_body_size 4096M;
server {
    server_name comfyui.example.com;

    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
    proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
    proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";

    location / {
        auth_basic "Restricted";                   # 認証時に表示されるメッセージ
        auth_basic_user_file /etc/nginx/.htpasswd; # .htpasswdファイルのパス

        proxy_pass http://127.0.0.1:8188$request_uri;
    }

    listen 443 ssl;

    ssl_certificate /etc/letsencrypt/live/example/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example/privkey.pem; # managed by Certbot
}
server {
    server_name facefusion.example.com;

    location / {
        proxy_pass http://127.0.0.1:7878/;
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Upgrade $http_upgrade;
        proxy_read_timeout  36000s;
        auth_basic "Restricted";                   # 認証時に表示されるメッセージ
        auth_basic_user_file /etc/nginx/.htpasswd; # .htpasswdファイルのパス
    }

    listen 443 ssl;

    ssl_certificate /etc/letsencrypt/live/example/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example/privkey.pem; # managed by Certbot
}

server {
    server_name sdnext.example.com;

    location / {
        proxy_pass http://127.0.0.1:7860/;
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Upgrade $http_upgrade;
        proxy_read_timeout  36000s;
        auth_basic "Restricted";                   # 認証時に表示されるメッセージ
        auth_basic_user_file /etc/nginx/.htpasswd; # .htpasswdファイルのパス
    }

    listen 443 ssl;

    ssl_certificate /etc/letsencrypt/live/example/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example/privkey.pem; # managed by Certbot
}

Nginxの設定は参考までに。

私見:グラボ高すぎ問題

ROCmはビルドされたPyTorchで互換、とはいえ何かと罠挙動(特にNVidiaの16GBで動くワークフローがRadeonで動かなかったり、メモリ効率で何か課題がありそう)なので、圧倒的にNVidia一択。
ちなみにNVidiaでも結局ミドルエンドまではメモリ16GBが上限なので、わざわざ5080を買うより4060Tiの16GB(そのうち5060Tiも出る)や、メルカリで闇商人が6万5000円で売ってる22GBに魔改造したRTX2080Tiなど…ハイエンドなリグを組まなきゃならない理由が無い限りは、「それなり」のグラボで十分なのでは…という所。
https://pc.watch.impress.co.jp/docs/news/2005253.html

このような記事にある通り、RDNA3.5世代でメインメモリと共有したVRAMで動くミニPCが出てきたり、巨大VRAM時代の何か新しいスタイルみたいなのが出てきそうな予感はする。