👏
Fly GPUsでOllama実行環境をつくる
- Fly.ioは使う時だけ自動で起動する設定にできるので検証環境のGPUインスタンスのコストを抑えられそうので試した
- Ollamaはライブラリに各種LLMが登録されていてWeb APIや対話シェルを起動できて比較する時に便利
ドキュメント
環境構築
GoogleのGemmaがライブラリにあるので、これを使えるようにする
以下のようなfly.tomlを用意してfly launch
するだけ
- 現在ord(シカゴ)リージョンのみ使える
- 料金はA100 40G PCIe: $2.50/hr per GPU
- イメージはビルドしなくてもollama/ollama | Docker Hubが使える
-
release_command = "ollama pull gemma"
でデプロイ時にモデルをダウンロード
APIアクセス
❯ curl -sX POST https://XXX.fly.dev/api/generate -d '{
"model": "gemma",
"prompt":"日本で一番高い山は"
}' | jq .response;
"日本で"
"一番"
"高い"
"山"
"は"
"富士山"
"です"
"。"
"富士山"
"は"
"海"
"抜"
"高度"
"3"
","
"7"
"7"
"6"
"メートル"
"に"
"達"
"し"
"、"
"日本の"
"最高"
"峰"
"です"
"。"
""
応答速度
手持ちのWindows(WSL)とmacOSでの実行速度を比較する
Fly GPUs(a100-pcie-40gb)
> for i in {1..10}; do
curl -sX POST https://XXX.fly.dev/api/generate -d '{
"model": "gemma",
"prompt":"日本で一番高い山は"
}' -o /dev/null -w '%{time_total}\n' | xargs
done | awk '{ total += $1; count++ } END { print total/count }'
0.635101
WSL
- AMD Ryzen 5 5600X 6-Core Processor
- RAM 8GB
- NVIDIA GeForce RTX 4070
- CUDA Toolkit 11.5
$ for i in {1..10}; do
curl -sX POST http://localhost:11434/api/generate -d '{
"model": "gemma",
"prompt":"日本で一番高い山は"
}' -o /dev/null -w '%{time_total}\n' | xargs
done | awk '{ total += $1; count++ } END { print total/count }'
1.00433
MacBook Pro
- Apple M1 Pro(2021)
- Ollama-darwin
❯ for i in {1..10}; do
curl -sX POST http://localhost:11434/api/generate -d '{
"model": "gemma",
"prompt":"日本で一番高い山は"
}' -o /dev/null -w '%{time_total}\n' | xargs
done | awk '{ total += $1; count++ } END { print total/count }'
1.26624
Metalを使った実行ができているのかよく分からないけど、CPUだったらひとまわり遅そうと予想した
対話シェル
起動中にfly ssh console
# ollama run gemma
>>> ここで一句、
私の心があなたの心をこませ、
あなたは私の心をこませ。
この句は、恋のテーマに、愛しい人の心をこませるテーマを含みます
Tips
外部にエンドポイントが公開されたくない
fly ips allocate-v6 --private の説明どうりにする
モデル保存ディレクトリの空き容量足りない
fly vol extend vol_XXX -s '32gb'
のように拡張する
ライブラリにないモデルを使いたい
OllamはLlama.cppで動くように変換したモデルをimport可能で以下にドキュメントがある
ollama/docs/import.md at main · ollama/ollama
Web UI欲しい
Open WebUI (Formerly Ollama WebUI) というのがあるらしい(未検証)
Discussion