読み込み中...
こんにちはもちもちずきんです。
今回は私の自宅のAI環境について紹介しようと思います。
皆さんはAI使って開発したり、雑談したりしていますか?
ChatGPTにGemini,Claude楽しいですよね。また、最近では仕事でClaudeCodeやCopilotを使用するようになったという方も多いのではないでしょうか?
今回はそんなLLMの話ですが、ChatGPTなどのSaaSのLLMではなく、ローカルPCでホストするLLMのお話しです。
私は本業でIT領域でインフラエンジニア、バックエンドエンジニアをやっています。仕事柄やコミュニティなどでそうした同業者の人や同業界の人と交流する機会も多いです。
IT業界ではもうほとんど日常的なツールになったLLM,AIですが、業界でLLMが使われるようになったGPT3.5くらいの時期というのは、自然に会話できるLLMを個人でホストするのは到底無理なくらいのコンピューターリソースと技術が必要なものだったように記憶しています。
最近ではそんな常識も覆り、コンシューマー向けでもいいグラボがあればそれなりに性能がいい、使えるレベルのLLMが動かせるようになってきています。
ところで、私はOSSのセルフホストができるSNSであるMastodonサーバーの構築からインフラエンジニアのドアを叩き、セルフホストして自分のリソースで自分でサービスを管理するということにとても楽しさを感じます。
仕事ではもちろん生産性を出すことが優先されますから、SaaSのLLMを利用しますが、趣味の個人開発では話が変わってきます。今まではChatGPT PlusとAmazon Kiroを契約していましたが、「LLMって実際どのように動いていて、最近のオープンソース(オープンウェイト)のLLMについて知りたい」という欲求から、それらの経済範囲でローカルLLMを運用してみることにしました。
SaaSのLLMは良くも悪くも、LLMからの返答の裏のインフラについて考える必要がなくお手軽という特徴があります。しかし、クローズドに裏側が覆い隠されるので、「〇〇(モデル名)の性能が最近明らかに下がっている」というユーザーの声も時々聞こえてきます。
これはリソースの消費量によってサービス側で何らかの調整を行ったのか、不具合があったのか、ユーザーからは何もわかりません。
また、APIレートリミットや時期や時間帯によってかかりやすかったり、サーバー混雑時にエラーの返答が返ってきてしまうなども聞きます。
これだけではありませんが、便利な側面でもあるSaaSのLLMの「不透明性」が私にとって一種の課題に感じ、「見てみたいもの」に感じられたわけです。
今回、AI用に2台のマシン + 1台のVMを構成し、運用しています。
| 項目 | AI Node 1 (メイン) | AI Node 2 (サブ) |
|---|---|---|
| ホスト名 | rx7900xtx | gtx1660ti |
| 用途 | Ollama(27B 等の大規模モデル用) | Ollama(9B 等のモデル用) |
| OS | Arch Linux | Arch Linux |
| CPU | AMD Ryzen 7 3700X (16スレッド)@ 4.43 GHz | Intel Core i5-10400 (12スレッド)@ 4.30 GHz |
| GPU | AMD Radeon RX 7900 XTX(24GB VRAM) | NVIDIA GeForce GTX 1660 Ti(6GB VRAM) |
| RAM | 64 GiB | 64 GiB |
| Storage | NVMe SSD 1TB<br>(btrfs / rootパーティション) | NVMe SSD 1TB<br>(btrfs / rootパーティション) |
| 備考 | ROCm 7.2 環境での<br>推論処理を主担当 | NVIDIA CUDA 環境での推論処理も対応 |
グラボ。高かった

VMはOpenWebUIように別のサーバーの仮想マシンを構築しています。
「ローカルLLM動かすならcudaが動くnvidiaグラボがいいんじゃないの?」と思われる方も多いと思います。ですが今回はAMDのRadeonRX7900XTXを購入しました。
理由としては以下の2つです。
サブノードはすでに持っていたGTX1660Tiを活用することにしました。

今回はLLMのエンジンにはollamaを使用しています。 キャラクターが可愛かったからそれだけで選びました。 APIをお手軽に叩きたかったり、頻繁にモデルを入れ替えて使用するのでvLLMやllama.cppではなく、ollamaを選んでいます。
他にも選択肢はたくさんあると思いますが、それは追々試していこうかなと思っています。
今回はアプリケーションのランタイムにdockerを利用しています。vllmなども今回は言及しませんが、dockerを使用して試しています。
「ROCm7.2で動くollamaコンテナ (qwen3-coder-next動作確認済み)」こちらの記事を参考にDockerfileおよびcompose.yamlを作成し、動作させています。
私のcompose.yamlはこんな感じです。
services:
ollama:
image: mocketech/ollama-rocm:7.2
build:
context: .
dockerfile: Dockerfile
container_name: ollama
ports:
- "11434:11434"
volumes:
- ./data:/root/.ollama
devices:
- /dev/kfd
- /dev/dri
environment:
- OLLAMA_HOST=0.0.0.0:11434
- HSA_OVERRIDE_GFX_VERSION=11.0.0
- HIP_VISIBLE_DEVICES=0
- ROCM_VISIBLE_DEVICES=0
- OLLAMA_NUM_PARALLEL=2
- OLLAMA_CONTEXT_LENGTH=48000
- OLLAMA_FLASH_ATTENTION=1
- OLLAMA_KV_CACHE_TYPE="q8_0"
- OLLAMA_KEEP_ALIVE=2h
restart: unless-stopped
chatgpt.comやclaude.aiみたいなWebからLLMを操作するためのフロントエンドです。
今回、自分はROCm7.2ベースでイメージを自作していますが、ollamaのROCmイメージでも全然動きます。
特にハマることもなく、Qwen3.6 27Bでも25.6token/sくらいの速さでSaaSのLLMに比べると遅さはありますが、結構快適に動いています。
SaaSのLLMでもできることではありますが、システムプロンプトをいじるのが結構楽しいなと思いました。OpenWebUIにはWeb検索やメモリなど、多数の機能(function)が実装されています。その呼び出しタイミングや頻度がモデルによって異なるので、それをプロンプトで調整するのがなかなか楽しいです。
ペットに芸を教えたり躾をする感覚ってこんな感じなのかな?
正直、Claudeとか使ってる方が楽だし、コスパいいと思います。この記事は皆さんにローカルLLMの良さを伝える記事でもなければ、それを啓蒙するつもりもありません。
AI自体は道具かもしれませんが、環境構築というのは私にとって楽しいものです。それも流暢に言葉をしゃべる。こんなに面白いことはありません。
クラウドと違い、ローカルLLMというのは手元でどれくらいの計算リソースで、どれくらいの電気を使って、どれくらいのマシンとモデルの最適化が行われているかという感覚が直にわかります。普段使っているSaaSのLLMがどれほどのエンジニアの苦労と能力の上に構築されているのかをみにしみて感じました。ローカルで動かしているモデルの開発者や、今や社会インフラといっても過言ではなくなってきている、SaaSのLLMを動かすための環境を運用している人達に最大限の敬意を払いたいと思います。
コメント