LLM社内運用の構築記録

Share
目次
カテゴリのアイコン カテゴリ一覧 AI

LLM社内運用の構築記録

LLM社内運用の構築記録

更新日

実施環境

  • Windows 11 WSL2 Ubuntu
  • 最終的な本番環境はLinuxを想定(推論性能、メモリ効率、運用時の安定性やメンテナンス性、依存関係・互換性のトラブルの少なさなどの面からLinux環境を推奨)

※ Windows環境(WSL含む)でも動作可能だが、CPUでの推論性能が比較的低く(Linux版に比べて5~20%程度遅くなることが多い)、メモリ効率の低下、動作実績の少なさによる運用時のトラブル対応やメンテナンスの煩雑さ、Pythonライブラリや関連ツールの依存関係・互換性の問題などによりLinux環境が望ましい。

使用バージョンの決定

社内運用するLLMとして「Llama-3-ELYZA-JP」のGGUF量子化モデル(Q4_K_M)を採用。

また、これに対応する推論エンジンとして llama.cpp を採用。

補足1:ELYZAモデルの選択について

2025.05.26時点最新は、2024.06.26に公開された「Llama-3-ELYZA-JP」シリーズ。

  • フル精度モデル(GPU必須、精度が最も高いが、メモリ消費量が大きく、運用コストも高い。)
  • AWQ量子化モデル(メモリ少、CPU少、精度の低下が目立つことがある。専用の推論エンジンが必要)
  • GGUF量子化モデル(精度とサイズのバランスが良く、CPUでも運用可能で比較的軽量・高速。メモリ8GB以上必要(16GB推奨)、汎用性・互換性高)

CPU環境では、GGUF量子化モデル(Q4_K_M)が適していると判断した。

補足2:推論エンジン(llama.cpp)について

  • GGUF フォーマットは llama.cpp 向けに設計されており、同エンジンでの利用が最も安定かつ高い互換性を持つ。
  • モデルの展開に約5GBのメモリが必要で、実行時には追加で1~2GBのメモリを消費する。
  • 一度モデルを読み込むとメモリに保持されるため、再ロード時の負荷は少ない。
  • Python環境ではllama-cpp-pythonを利用することで、同様に推論が可能である。

インストール手順

1. システム準備

sudo apt update && sudo apt upgrade -y
sudo apt install -y git git-lfs build-essential cmake python3 python3-venv python3-pip

2. llama.cpp 推論エンジンの準備

# 作業用ディレクトリ作成
mkdir ~/hiprojects
cd ~/hiprojects

# 推論エンジン llama.cpp をGitHubからクローン
git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp

ビルド時に以下エラーが出る場合:

CMake Error at common/CMakeLists.txt:94 (message):
  Could NOT find CURL.  Hint: to disable this feature, set -DLLAMA_CURL=OFF

対応策として、オプションを追加して再ビルド:

cmake -B build -DLLAMA_CURL=OFF -DLLAMA_SERVER_OPENAI=ON
cmake --build build

3. 推論モデル(ELYZA)ダウンロード

# 推論モデル格納用ディレクトリ作成
cd ~/hiprojects
mkdir models
cd models

# Git LFSの初期化
git lfs install

# Hugging FaceからELYZAモデルのGGUF版をクローン
git clone https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF
cd Llama-3-ELYZA-JP-8B-GGUF

# LFSオブジェクトを取得し、ファイルを復元
git lfs fetch --all
git lfs checkout

ファイルサイズを確認して、数GBであれば成功:

ls -lh Llama-3-ELYZA-JP-8B-q4_k_m.gguf

4. 推論テスト実行

# 推論エンジンディレクトリへ移動し、CLIでテスト実行
cd ~/hiprojects/llama.cpp
./build/bin/llama-cli -m ../models/Llama-3-ELYZA-JP-8B-GGUF/Llama-3-ELYZA-JP-8B-q4_k_m.gguf -p "こんにちは、調子はいかがですか?" -n 128

正常に動作すれば、AIからの応答が表示されます。

こんにちは!私はAIなので、調子や感情はありませんが、会話を通じて皆さんとコミュニケーションを取ることができます。今日も皆さんと楽しくお話ししたいと思っています!

llama-server で外部マシンからの HTTP 接続を有効化

1. WSL2 側で llama-server を起動

cd ~/hiprojects/llama.cpp
./build/bin/llama-server \
-m ~/hiprojects/models/Llama-3-ELYZA-JP-8B-GGUF/Llama-3-ELYZA-JP-8B-q4_k_m.gguf \
--host 0.0.0.0 \
--port 8080
  • --host 0.0.0.0 を指定することで、WSL2 内の全インターフェイスから接続を受け付ける。
  • まずは curl http://127.0.0.1:8080 等で、WSL2 内部からの動作を確認しておく。

2. Ubuntu のファイアウォール(UFW/iptables)設定を確認する

# UFW の状態を確認
sudo ufw status
# 有効なら 8080/tcp を許可
sudo ufw allow 8080/tcp
# SSH(22番)もまだなら開ける
sudo ufw allow ssh
# 変更を反映
sudo ufw reload

3. クライアント側からアクセス

サーバー側の IP を調べる。

ip addr show
# inet 192.168.1.53/24 dev enp3s0

別マシンからブラウザまたは curl で接続。

http://192.168.1.53:8080/

これでWeb UIが開けばOK、APIも同様に
http://192.168.1.53:8080/v1/chat/completions へアクセスできます。

補足:SSH 接続の有効化

同じく社内マシンから SSH で Ubuntu に入るために、以下を設定。

sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
# UFW で許可済みなら、そのまま ssh ユーザー@192.168.1.53 でログイン

以上の設定で、同一ネットワーク内の別マシンから HTTP(Web UI/API)および SSH による接続が可能になります。

新規モデルの導入手順

「Llama-3-ELYZA-JP」の8Kに対して、128Kの最大コンテキスト長を持つ「DeepSeek-R1-Distill-Qwen-Japanese-14B(Q4_K_M)モデル」と追加導入することにした。

1. モデルディレクトリに移動

cd ~/hiprojects/models

2. モデルの取得

wget https://huggingface.co/mmnga/cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf/resolve/main/cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-Q4_K_M.gguf

ファイルサイズを確認して、数GBであれば成功:

ls -lh cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-Q4_K_M.gguf

3. llama-cli で推論テスト

cd ~/hiprojects/llama.cpp
./build/bin/llama-cli \
  -m ../models/cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-Q4_K_M.gguf \
  -p "テスト:こんにちは、調子はいかがですか?" \
  -n 128

4. llama-server での起動

cd ~/hiprojects/llama.cpp
./build/bin/llama-server \
  -m ~/hiprojects/models/cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-Q4_K_M.gguf \
  --host 0.0.0.0 \
  --port 8080
  • 別ポート(例:8081)を指定することで、既存のサーバーと共存させられます
  • 必要に応じて UFW/iptables でポート開放を行ってください
アバターのアイコン

この記事を書いた人

アバターのアイコン

inoue55