Raspberry Pi 5 4台でDeepseek R1 Distill 8B Q40を実行
(github.com/b4rtaz)- distributed-llama v0.12.2で
deepseek_r1_distill_llama_8b_q40モデルをRaspberry Pi 5 8GB 4台で実行した結果、2台構成より評価・生成速度の両方が高かった - 2台構成はEvaluation 7.70 tok/s、Prediction 3.54 tok/sを記録し、4台構成はEvaluation 11.68 tok/s、Prediction 6.43 tok/sを記録
- 4台構成のPredictionログはトークンあたり約155.60ms、2台構成はトークンあたり約282.22msと表示され、同じモデルでもノード数の増加による処理速度の差が見られる
- 別のユーザーはv0.12.7で8ノード、2.5G LAN、旧世代Intel CPUベースの構成でEvaluation 33.64 tok/s、Prediction 16.63 tok/sを共有
- Raspberry Pi 5 8GB 2台でメモリ不足によりプロセスが終了する事例には、
--max-seq-len 4096によるコンテキストサイズ縮小が必要との回答が付いた
Raspberry Pi 5 8GB構成の実行結果
- テストモデルは
deepseek_r1_distill_llama_8b_q40、distributed-llamaのバージョンは0.12.2 - 比較対象は2 x Raspberry Pi 5 8GBと4 x Raspberry Pi 5 8GBの構成
| 構成 | Evaluation | Prediction |
|---|---|---|
| 2 x Raspberry Pi 5 8GB | 7.70 tok/s | 3.54 tok/s |
| 4 x Raspberry Pi 5 8GB | 11.68 tok/s | 6.43 tok/s |
2台構成のログ数値
- 2 x Raspberry Pi 5 8GB構成はEvaluationで次の数値を記録
nBatches: 32nTokens: 19tokens/s: 7.70129.89 ms/tok
- Predictionでは次の数値を記録
nTokens: 77tokens/s: 3.54282.22 ms/tok
- 実行終了時のログにはNetwork is closedと表示
4台構成のログ数値
- 4 x Raspberry Pi 5 8GB構成はEvaluationで次の数値を記録
nBatches: 32nTokens: 19tokens/s: 11.6885.63 ms/tok
- Predictionでは次の数値を記録
nTokens: 77tokens/s: 6.43155.60 ms/tok
- ログにはトークン生成中の送信
864 kB、受信1191 kBが繰り返し表示される
別ユーザーの8ノード結果
- あるユーザーはdistributed-llama v0.12.7で8ノードを使用した結果を共有
- 多くは旧世代Intel CPU、4コアまたは6コア構成
- AVX2対応
- 2.5G LAN接続
- この構成の実行結果は以下の通り
- Evaluation:
33.64 tok/s,29.73 ms/tok - Prediction:
16.63 tok/s,60.13 ms/tok - Predictionトークン数は
245
- Evaluation:
- 使用したコマンドは
./dllama inferenceにモデル、トークナイザー、--buffer-float-type q80、--nthreads 6、--max-seq-len 4096、複数の--workers、--steps 256を指定する形式
実行時の問題と回答
- Raspberry Pi 5 8GB 2台構成で実行中、RequiredMemory: 20474 MBが表示された後に
Killedで終了する事例が共有- ルートノードのコマンドには
--buffer-float-type q80、--steps 16、--nthreads 4、workerアドレス1つが含まれる - 回答は
--max-seq-len 4096でコンテキストサイズを縮小すべきという内容
- ルートノードのコマンドには
- 別のユーザーは、複数workerに接続した後、
what is 99+12というプロンプトに対して空白とピリオドだけが出力される現象を共有- ログには
RopeScaling: f=8.0, l=1.0, h=4.0, o=8192、RequiredMemory: 3310 MB、Chat template: deepSeek3が表示 - 管理者は使用中のバージョン、最新の変更をpullしたか、どのCPUで実行しているかを確認してほしいと返答
- ログには
1件のコメント
Hacker News の意見
Raspberry Pi で Deepseek R1 を動かすという発表は、だいたい同じパターンです。実際には DeepSeek の蒸留手法で修正した Llama や Qwen を実行しているものに近いです
DeepSeek は、蒸留された大規模言語モデルが「Wait.」で自分の出力を区切るよう促し、ある程度の推論をさせますが、完全なモデルの推論力よりはるかに弱く、すでに出した結論を新しいニュアンスへ発展させるというより、延々と「Wait.」を繰り返して自己疑念のループに陥ることがあります
ただし公式 R1 リポジトリの Distilled Model Evaluation[1] セクションを見ると、DeepSeek-R1-Distill-Llama-8B もかなり良く、一部のベンチマークでは 4o-0513 や Sonnet-1022 より優れているとされています
形式文法からサンプリングするものもあることを覚えておく必要があります。llama.cpp には GBNF があり、lazy grammar[2] の設定も追加され、一部の用途ではかなり使えるようになっています。つまり文法が後から介入するということです
さらに追加のファインチューニングの余地もあります。複数の企業が今では「RFT」サービスを提供しており、普通の教師ありファインチューニング用データセットを、大きな R1 が作った合成推論データで充実させる方式です。なのでこの結果は、思ったよりずっと価値のある事前結果かもしれません
6 tok/s のデコードは速くありませんが、Raspberry Pi を使う人たちはそういうことをあまり気にしません
[1] https://github.com/deepseek-ai/DeepSeek-R1#distilled-model-e...
[2] https://github.com/ggerganov/llama.cpp/pull/9639
R1 が Llama モデルを学習させるとはどういうことなのか、DeepSeek の蒸留方法の何が特別なのかが気になります
ちゃんとした「蒸留」モデルなら、より大きなモデルを完全に模倣するよう最初から学習されるべきですが、ここではそういうことは起きていません
いつものことですが、tok/s の数値はかなり割り引いて見るべきです
デモでは 500 トークンにも満たない質問を「解決」しています。可能であること自体は今でも驚きですが、実際の問題や実際に有用なコンテキスト長の「考える」モデル、つまり 8〜16k トークンを扱う場合には、その速度に近づくのは難しいです。チャンネル数の多い Epyc でも、コンテキスト長が 4096 あたりを過ぎると 2〜4 tok/s まで落ちます
pos=0 => P 138 ms S 864 kB R 1191 kB Connect
pos=2000 => P 215 ms S 864 kB R 1191 kB .
pos=4000 => P 256 ms S 864 kB R 1191 kB manager
pos=6000 => P 335 ms S 864 kB R 1191 kB the
モデルが少し助けるだけでも、今よりずっと有能になり得ます
悪い結果ではありませんが、Pi 5 4台に £320 を使うなら、中古の 12GB 3080 が手に入り、トークン速度もおそらく 10倍以上速いでしょう
https://github.com/geerlingguy/ollama-benchmark?tab=readme-o...
ここで興味深いのは、複数のコンピュータにまたがって分散方式で Llama 推論を実行できることです
Seti@HOME のように、世界中に分散した遅い R1 フルモデルにツールを接続し、深く複雑なタスクを公開的に推論させられるのではないでしょうか
これは現代版の Beowulf クラスタです
Pi 5 4台より少し多くお金を出せば、eBay で 32コア Epyc CPU と 64GB メモリを搭載した 1U Dell サーバーを見つけられ、少なくとも一桁以上高い性能が出ます
ホームラボで Beowulf クラスタを語りたいなら、少なくとも非常に安価な FDR Infiniband ネットワークを付けた計算ノードで、Slurm+Lustre や k8s+OpenStack+Ceph のような構成を動かすべきだと思います。遅いノード4台で線形スケールすらしないようなものは、ちょっと見ていられません
複数の Raspberry Pi がどのように並列に使われているのか、見ても理解してもいません
誰か方向性を教えてくれると助かります
この素晴らしい新しい AIツール は、いつごろ
apt-get installでインストールできるようになるのだろう?brew install ollamaがよい出発点になるかもしれないollama pullはかなり近い形apt-getではないが、「AIツール」の下にあるインフラ構成要素の多くはconda installでインストール可能会話を保存してくれて、モデルのダウンロードも簡単にしてくれる
Mac でこのモデルを試してみたいなら、使われているモデルは DeepSeek-R1-Distill-Llama-8B に近そうで、新しい llm-mlx プラグイン で次のように実行できる
brew install llm # or pipx install llm or uv tool install llmllm install llm-mlxllm mlx download-model mlx-community/DeepSeek-R1-Distill-Llama-8Bllm -m mlx-community/DeepSeek-R1-Distill-Llama-8B 'poem about an otter'性能もかなりよく、先ほど実行したときは 22 tokens/second が出た: https://gist.github.com/simonw/dada46d027602d6e46ba9e4f48477...
メモリを増やすと役に立つだろうか? 最近 16GB RAM 搭載の Rpi 5 が出た
モデルがメモリに収まりさえすれば、実際の動作を決めるのはメモリ帯域幅
8B パラメータの Q4 モデルは 8GB Pi 1台にも収まるはず
最近 Adafruit に在庫が入ったときに何とか1台買えたが、すぐまた売り切れた
とはいえ性能とは別に、実行に 8GB 超を要求するため Ollama ではそもそも動かせないモデルもある
Alexa や Google Home のような製品が必要だ
ただしクラウドに接続するのではなく、ローカル大規模言語モデルを実行する形であるべき。なぜまだ存在しないのか、誰も作っていないのか分からない
優れた大規模言語モデルは高価なので、本当の問いは、人々が買うほど有用なモデルを載せつつ、利益が出るほど安く作れるかどうか
ツール利用ができるかは確かではないが、天気のように質問できそうなものを公開することはできる