🤖

インフラエンジニアもちもちずきんのローカルLLM構築記

こんにちはもちもちずきんです。
今回は私の自宅のAI環境について紹介しようと思います。

はじめに:個人開発でAIを「ホストする」喜び

皆さんはAI使って開発したり、雑談したりしていますか?
ChatGPTにGemini,Claude楽しいですよね。また、最近では仕事でClaudeCodeやCopilotを使用するようになったという方も多いのではないでしょうか?

今回はそんなLLMの話ですが、ChatGPTなどのSaaSのLLMではなく、ローカルPCでホストするLLMのお話しです。

AIを使うことから、AIを「動かす」インフラとして見ることへの興味

私は本業でIT領域でインフラエンジニア、バックエンドエンジニアをやっています。仕事柄やコミュニティなどでそうした同業者の人や同業界の人と交流する機会も多いです。

IT業界ではもうほとんど日常的なツールになったLLM,AIですが、業界でLLMが使われるようになったGPT3.5くらいの時期というのは、自然に会話できるLLMを個人でホストするのは到底無理なくらいのコンピューターリソースと技術が必要なものだったように記憶しています。
最近ではそんな常識も覆り、コンシューマー向けでもいいグラボがあればそれなりに性能がいい、使えるレベルのLLMが動かせるようになってきています。

ところで、私はOSSのセルフホストができるSNSであるMastodonサーバーの構築からインフラエンジニアのドアを叩き、セルフホストして自分のリソースで自分でサービスを管理するということにとても楽しさを感じます。

「楽しみたい」ことと「学びたい」という知的欲求

仕事ではもちろん生産性を出すことが優先されますから、SaaSのLLMを利用しますが、趣味の個人開発では話が変わってきます。今まではChatGPT PlusとAmazon Kiroを契約していましたが、「LLMって実際どのように動いていて、最近のオープンソース(オープンウェイト)のLLMについて知りたい」という欲求から、それらの経済範囲でローカルLLMを運用してみることにしました。

SaaSのLLMに対する懸念

SaaSのLLMは良くも悪くも、LLMからの返答の裏のインフラについて考える必要がなくお手軽という特徴があります。しかし、クローズドに裏側が覆い隠されるので、「〇〇(モデル名)の性能が最近明らかに下がっている」というユーザーの声も時々聞こえてきます。

これはリソースの消費量によってサービス側で何らかの調整を行ったのか、不具合があったのか、ユーザーからは何もわかりません。

また、APIレートリミットや時期や時間帯によってかかりやすかったり、サーバー混雑時にエラーの返答が返ってきてしまうなども聞きます。

これだけではありませんが、便利な側面でもあるSaaSのLLMの「不透明性」が私にとって一種の課題に感じ、「見てみたいもの」に感じられたわけです。

動作環境

ハードウエア

今回、AI用に2台のマシン + 1台のVMを構成し、運用しています。

項目AI Node 1 (メイン)AI Node 2 (サブ)
ホスト名rx7900xtxgtx1660ti
用途Ollama(27B 等の大規模モデル用)Ollama(9B 等のモデル用)
OSArch LinuxArch Linux
CPUAMD Ryzen 7 3700X (16スレッド)@ 4.43 GHzIntel Core i5-10400 (12スレッド)@ 4.30 GHz
GPUAMD Radeon RX 7900 XTX(24GB VRAM)NVIDIA GeForce GTX 1660 Ti(6GB VRAM)
RAM64 GiB64 GiB
StorageNVMe SSD 1TB<br>(btrfs / rootパーティション)NVMe SSD 1TB<br>(btrfs / rootパーティション)
備考ROCm 7.2 環境での<br>推論処理を主担当NVIDIA CUDA 環境での推論処理も対応

グラボ。高かった

VMはOpenWebUIように別のサーバーの仮想マシンを構築しています。

なぜAMDなのか?

「ローカルLLM動かすならcudaが動くnvidiaグラボがいいんじゃないの?」と思われる方も多いと思います。ですが今回はAMDのRadeonRX7900XTXを購入しました。
理由としては以下の2つです。

  1. 大きめのモデルを動かしたいこともあり、VRAMあたりのコスパが良かったから
  2. リサスーが好きだから

サブノードはすでに持っていたGTX1660Tiを活用することにしました。

ソフトウエア

エンジン:ollama


今回はLLMのエンジンにはollamaを使用しています。 キャラクターが可愛かったからそれだけで選びました。 APIをお手軽に叩きたかったり、頻繁にモデルを入れ替えて使用するのでvLLMやllama.cppではなく、ollamaを選んでいます。
他にも選択肢はたくさんあると思いますが、それは追々試していこうかなと思っています。

技術的詳細:AMD GPU × ROCm 7.2 × Docker × 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

Web:OpenWebUI


chatgpt.comやclaude.aiみたいなWebからLLMを操作するためのフロントエンドです。

構築してわかったこと・今のところの課題

意外と動く

今回、自分はROCm7.2ベースでイメージを自作していますが、ollamaのROCmイメージでも全然動きます。

特にハマることもなく、Qwen3.6 27Bでも25.6token/sくらいの速さでSaaSのLLMに比べると遅さはありますが、結構快適に動いています。

プロンプト作りが楽しい

SaaSのLLMでもできることではありますが、システムプロンプトをいじるのが結構楽しいなと思いました。OpenWebUIにはWeb検索やメモリなど、多数の機能(function)が実装されています。その呼び出しタイミングや頻度がモデルによって異なるので、それをプロンプトで調整するのがなかなか楽しいです。

ペットに芸を教えたり躾をする感覚ってこんな感じなのかな?

おわりに:AIは道具でも、環境構築は創作活動

正直、Claudeとか使ってる方が楽だし、コスパいいと思います。この記事は皆さんにローカルLLMの良さを伝える記事でもなければ、それを啓蒙するつもりもありません。

AI自体は道具かもしれませんが、環境構築というのは私にとって楽しいものです。それも流暢に言葉をしゃべる。こんなに面白いことはありません。

クラウドと違い、ローカルLLMというのは手元でどれくらいの計算リソースで、どれくらいの電気を使って、どれくらいのマシンとモデルの最適化が行われているかという感覚が直にわかります。普段使っているSaaSのLLMがどれほどのエンジニアの苦労と能力の上に構築されているのかをみにしみて感じました。ローカルで動かしているモデルの開発者や、今や社会インフラといっても過言ではなくなってきている、SaaSのLLMを動かすための環境を運用している人達に最大限の敬意を払いたいと思います。

1
0
0
0
Posts
0
Followers
0
Likes

Properties

Page
テクノロジー
BLOG