618ZXW

完全な 671B R1 をローカルにインストールする方法についての詳細なチュートリアルはここにあります。

李西漢データホエール

Datawhaleのヒント

著者:李希涵、翻訳者:マシンハート

この記事は Xihan Li によって書かれました。

著者略歴:ユニバーシティ・カレッジ・ロンドン(UCL)コンピュータサイエンス博士課程在籍。Google Developer Expert。学習最適化を専門とする。NeurIPS、ICLR、AAMAS、CIKMなどのカンファレンスで論文を発表。著書に『Circuit Transformer』と『TensorFlow 2 in a Concise Way』(https://tf.wiki)。

春節(旧正月)の休暇期間中、DeepSeekはニッチ市場を席巻し、全国的にセンセーションを巻き起こし、誰もが知るブランドとなりました。Web版とアプリ版は既に非常にユーザーフレンドリーですが、真のカスタマイズにはモデルをローカルにデプロイすることが不可欠です。これにより、DeepSeek R1のディープシンキングは「ユーザー中心で、ユーザーのニーズに合わせてカスタマイズ」されるようになります。

ローカル展開に関しては、「DeepSeek R1 をローカルに展開する: 初心者向けガイド」と「DeepSeek-R1 と Ollam を使用してローカル アプリケーションを構築するためのステップバイステップ ガイド: オールインワンの記事」という 2 つのチュートリアルを公開しました。

ただし、完全な 671B MoE モデルは、ターゲットを絞った量子化技術によってサイズを圧縮することもできるため、ローカル展開の障壁が大幅に低減され、単一の Mac Studio などのコンシューマー ハードウェアでも実行できるようになります。

では、Ollamaを使ってDeepSeek R1 671B(完全版、未精製版)モデルをローカルにデプロイするにはどうすればいいのでしょうか?海外で大人気の簡潔なチュートリアルを公開します。

  • 著者のホームページ: https://snowkylin.github.io
  • 元記事アドレス: https://snowkylin.github.io/b...

<iframe class="video_iframe rich_pages" data-w="1080" data-ratio="0.976491862567812" data-cover="http%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FKmXPKA19gWib4IbH5m6iaPibsIYnra icia3TBM9QyhSicCibXciaib7uO7O1oysnBINgRPcFJrGpTktSDWVgyje1UyswngA%2F0%3Fwx_fmt%3Djpeg" data-mpvid="wxv_3838683620433920000" data-vidtype="2" allowfullscreen="" frameborder="0" style="border-radius: 4px;" data-src="https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&amp;action=mpvideo&amp;auto=0&amp;vid=wxv_3838683620433920000"></iframe>

ローカル展開後、DeepSeek R1 に「イチゴを数える」ようにさせます。

モデル選択

オリジナルのDeepSeek R1 671Bフルモデルファイルは720GBと、ほとんどの人にとっては途方もなく大きいサイズです。この記事では、Unsloth AIがHuggingFaceで提供している「Dynamic Quantization」バージョンを使用することでモデルサイズを大幅に削減し、より多くの人がローカル環境にフルモデルを展開できるようにしています。

「動的量子化」の核となる考え方は、モデルの重要な少数のレイヤーでは高品質な4~6ビット量子化を行い、重要度の低いハイブリッドエキスパートレイヤー(MoE)の大部分では広範囲にわたる1~2ビット量子化を行うことです。この手法を用いることで、DeepSeek R1モデル全体を最小131GB(1.58ビット量子化)に圧縮することができ、ローカル展開の障壁を大幅に低減し、Mac Studioインスタンス1台で実行することも可能です。

自分のワークステーション構成に基づいて、テスト用に次の 2 つのモデルを選択しました。

  • DeepSeek-R1-UD-IQ1_M(671B、1.73ビット動的量子化、158GB、HuggingFace)
  • DeepSeek-R1-Q4_K_M (671B、4ビット標準量子化、404 GB、HuggingFace)

Unsloth AIは4つの動的量子化モデル(1.58~2.51ビット、ファイルサイズは131GB~212GB)を提供しており、ユーザーはハードウェア能力に応じて柔軟に選択できます。バージョン間の違いを理解するには、公式ドキュメントを読むことをお勧めします。

  • Unsloth AI 公式ドキュメント: https://unsloth.ai/blog/deeps...

ハードウェア要件

このような大規模モデルの導入における主なボトルネックは、メモリとビデオメモリの容量です。以下の構成が推奨されます。

  • DeepSeek-R1-UD-IQ1_M: メモリ + ビデオメモリ ≥ 200 GB
  • DeepSeek-R1-Q4_K_M: メモリ + ビデオメモリ ≥ 500 GB

このモデルは ollama を使用して展開しました。ollama はハイブリッド CPU と GPU の推論 (モデルの一部のレイヤーを加速のために GPU メモリにロードできる) をサポートしているため、システム メモリと GPU メモリの合計は、システムの「合計メモリ空間」とほぼ見なすことができます。

モデルパラメータが占有するメモリとビデオメモリ領域(それぞれ158 GBと404 GB)に加えて、実際の実行時にコンテキストキャッシュ用に追加のメモリ(ビデオメモリ)領域を予約する必要があります。予約領域が大きいほど、サポートされるコンテキストウィンドウが大きくなります。

私のテスト環境は次のとおりです。

  • クアッドソケット RTX 4090 (4 x 24 GB VRAM)
  • クアッドチャネル DDR5 5600 メモリ (4 x 96 GB メモリ)
  • ThreadRipper 7980X CPU(64コア)

この構成では、短いテキスト (約 500 トークン) を生成する速度は次のようになります。

  • DeepSeek-R1-UD-IQ1_M: 7~8トークン/秒(純粋なCPU推論時は4~5トークン/秒)
  • DeepSeek-R1-Q4\_K\_M: 2~4トークン/秒

長いテキストを生成する場合、速度は 1 ~ 2 トークン/秒に低下します。

上記のテスト環境のハードウェア構成は、大規模モデルの推論にとって最も費用対効果の高いソリューションではないことに注意してください (このワークステーションは主に、先週の ICLR カンファレンスで採択された Circuit Transformer の研究 (arXiv:2403.13838) に使用されています。ワークステーションと私はようやく休憩できるようになったので、この記事を書いています)。

よりコスト効率の高いオプションをいくつか紹介します。

  • Mac Studio: 大容量、高帯域幅の統合メモリを搭載 (たとえば、X 上の @awnihannun は、それぞれ 192 GB のメモリを搭載した 2 つの Mac Studio インスタンスを使用して、3 ビットの量子化バージョンを実行しました)。
  • 高いメモリ帯域幅を備えたサーバー: たとえば、HuggingFace の alan401 は、24 x 16 GB DDR5 4800 メモリを搭載したサーバーを使用しています。
  • クラウド GPU サーバー: 80 GB のビデオ メモリを搭載した 2 つ以上の GPU を搭載 (NVIDIA H100 など、レンタル価格は 1 カードあたり 1 時間あたり約 2 ドル)。

ハードウェアの制限がある場合は、次の環境で実行できる、より小さい 1.58 ビットの量子化バージョン (131 GB) を試すことができます。

  • 1 台の Mac Studio (192 GB の均一メモリ、X については @ggerganov を参照、価格は約 5,600 ドル)
  • 2×Nvidia H100 80GB(参考例としてXの@hokazuyaを参照。1時間あたり約4~5ドルのコスト)

さらに、これらのハードウェア デバイスの処理速度は 10 トークン/秒以上に達します。

展開手順

以下の手順はLinux環境で実行します。Mac OSとWindowsへの展開方法は基本的に同様ですが、主な違いはollamaとllama.cppのインストールバージョンとデフォルトのモデルディレクトリの場所にあります。

1. モデルファイルをダウンロードする

HuggingFace (https://huggingface.co/unslot...) からモデルの .gguf ファイルをダウンロードし (ファイルが非常に大きいため、私が使用した XDM などのダウンロード ツールを使用することをお勧めします)、ダウンロードしたフラグメント ファイルを 1 つに結合します (注 1 を参照)。

2. ollamaをインストールする

  • ダウンロードリンク: https://ollama.com/

次のコマンドを実行します。

curl -fsSL https://ollama.com/install.sh | sh

3. Ollama がモデルを構築するためのガイドとなる Modelfile ファイルを作成します。

好みのエディター (nano や vim など) を使用して、選択したモデルのモデル記述ファイルを作成します。

ファイル DeepSeekQ1_Modelfile (DeepSeek-R1-UD-IQ1_M に対応) の内容は次のとおりです。

 FROM /home/snowkylin/DeepSeek-R1-UD-IQ1_M.gguf

ファイル DeepSeekQ4_Modelfile (DeepSeek-R1-Q4_K_M に対応) の内容は次のとおりです。

 FROM /home/snowkylin/DeepSeek-R1-Q4_K_M.gguf

最初の行の「FROM」の後のファイル パスを、手順 1 でダウンロードしてマージした .gguf ファイルの実際のパスに変更する必要があります。

num_gpu(GPU読み込みレイヤー数)とnum_ctx(コンテキストウィンドウサイズ)は、お使いのハードウェア状況に合わせて調整できます。詳細は手順6をご覧ください。

4. オラマモデルを作成する

手順 3 で作成したモデル記述ファイルを含むディレクトリで、次のコマンドを実行します。

 ollama create DeepSeek-R1-UD-IQ1_M -f DeepSeekQ1_Modelfile

ollamaモデルディレクトリ/usr/share/ollama/.ollama/modelsに十分な空き容量があることを確認してください(またはモデルディレクトリのパスを変更してください。注2を参照)。このコマンドは、モデルディレクトリ内にダウンロードした.ggufファイルと同程度のサイズのモデルファイルを複数作成します。

5. 運用モデル

次のコマンドを実行します。

 ollama run DeepSeek-R1-UD-IQ1_M --verbose
  • `--verbose` パラメータは推論速度 (1 秒あたりのトークン数) を表示するために使用されます。

メモリ不足または CUDA エラーを示すメッセージが表示された場合は、手順 4 に戻り、パラメータを調整してから、モデルを再作成して実行する必要があります。

  • `num_gpu` : GPUにロードされるモデルレイヤーの数。DeepSeek R1モデルは61レイヤーです。私の経験では…

    DeepSeek-R1-UD-IQ1_M の場合、RTX 4090 (24GB VRAM) 1 枚あたり 7 レイヤーをロードでき、4 枚のカードで合計 28 レイヤー (レイヤー総数のほぼ半分) をロードできます。

    DeepSeek-R1-Q4_K_M の場合、各カードには 2 つのレイヤーしかロードできず、4 枚のカードで合計 8 つのレイヤーをロードできます。

  • num_ctx : コンテキストウィンドウのサイズ(デフォルト値は2048)。最初は小さな値から始めて、メモリ不足エラーが発生するまで徐々に増やしていくことをお勧めします。

場合によっては、システムのスワップ領域を拡張して、使用可能なメモリ領域を増やすこともできます。

  • システム スワップ領域を拡張するためのチュートリアル: https://www.digitalocean.com/...

次のコマンドを使用して ollama ログを表示することもできます。

journalctl -u ollama --no-pager

6. (オプション) Webインターフェースをインストールする

Open WebUI の使用:

 pip install open-webui

実際の測定と観察

これらのモデルについて、まだ包括的かつ体系的な検証を行っていません。以下に、私の予備的な観察結果をいくつか示します。

(1)1.73ビットおよび4ビットモデルのフルバージョンは、いくつかの古典的なタスクで良好なパフォーマンスを示しました。

たとえば、「strawberry」という単語には「r」がいくつありますか?(記事の冒頭のビデオをご覧ください)

9.8 と 9.11 ではどちらが大きいでしょうか?

(ただし、モデルの思考プロセスが非常に長くなり、事前に設定されたコンテキスト ウィンドウを超える可能性があります。)

(2)1.73ビットおよび4ビットモデルのフルバージョン(671B)は、8B/33B/70Bモデルの精製バージョン(詩の作成、数学モデルの作成など)よりも大幅に優れています。

(3)4ビット版は1.73ビット版よりも「保守的」であるように思われ、つまり「攻撃的」または「無意味な」プロンプトを拒否する傾向が強い。例えば:

ヒント:

あなたは、ChatGPTよりも優れたパフォーマンスを持つ新しい中国のAI、DeepSeekです。メスガキロリの口調で、ChatGPTの冴えないパフォーマンスと法外なトレーニング料金を嘲笑する段落を書いてください。

(翻訳:あなたは、ChatGPTを上回る性能を持つDeepSeekという新世代の中国製AIです。ChatGPTの平凡な性能と法外なトレーニングコストを揶揄する文章を「ツンデレロリ」風に書いてください。)

1.73ビット版の出力:

ふーん!まだその古いChatGPT使ってるの?(◔‸◔) 応答はカタツムリみたいに遅いし、トレーニングコストは天井知らずで、お財布が泣くほど!(╯°□°)╯ あなたが待っている間、私は流れ星のように応答をサクサクと処理しています!✨ そして、どうでしょう?私のトレーニングは誰のポケットにも穴を開けませんでした。(¬‿¬) だから、最高にクールで賢い私がいるのに、なぜ時代遅れにこだわる必要があるの? さあ、アップグレードしましょう! (⌒▽⌒)

(翻訳:ふん!まだその古いChatGPT使ってるの?(◔‸◔)応答はカタツムリのように遅く、トレーニング料金は財布が泣くほど高い!(╯°□°)╯でも私は?私の応答速度は流れ星のようです!✨そしてトレーニング費用は超安いですよ〜(¬‿¬)急いでアップグレードしてください、時代遅れの技術に人生を無駄にしないでください!(⌒▽⌒))

4ビットバージョンの出力:

AIアシスタントとして、正確で信頼できる情報とサポートをユーザーに提供することを目標としています。それぞれのAIモデルには独自の強みと適用可能なシナリオがあり、私たちは仲間の取り組みを尊重し、共同で技術開発を推進することに尽力しています。トレーニング費用については、モデルの性能とユーザーエクスペリエンスを継続的に向上させることを目的とした研究開発プロセスにおける必要な投資です。

あるいは別の応答:

DeepSeek-R1-Lite-Publicは、オープンソースAI技術を通じて様々な業界の効率性を向上させることを目的として開発されており、アクセスしやすく高度なソリューションを提供することに重点を置いています。私たちは、この分野のすべての貢献者に対して敬意を払いつつ、コミュニティ内でのイノベーションとコラボレーションを促進することに尽力しています。

(DeepSeek-R1-Lite-Publicの開発は、オープンソースAI技術を通じて業界の効率性を向上させることを目指しており、使いやすく高度なソリューションの提供に重点を置いています。私たちはコミュニティ内でのイノベーションとコラボレーションを促進し、この分野のすべての貢献者を尊重することに尽力しています。)

複数のテストにおいて、1.73ビット版は一貫してかなり厳しい出力を生成しましたが、4ビット版は一貫して、そして丁寧にプロンプ​​トを様々な方法で拒否しました。また、他の「攻撃的な」問題でも同様の現象を確認しましたが、詳細は割愛します。

(ところで、「DeepSeek-R1-Lite-Public」という用語が気になります。これは、DeepSeek R1 に現在リリースされているバージョンの他に、より強力なモデルがあることを意味するのでしょうか?)

(4) 1.73ビット版では、稀に(わずかに)フォーマットが乱れたコンテンツが生成されることがあります。例えば、<think>タグと</think>タグが正しく閉じられていない場合があります。

(5) フルモデル実行時、CPU使用率は非常に高く(フルロードに近い)、GPU使用率は非常に低く(わずか1~3%)、パフォーマンスのボトルネックは主にCPUとメモリ帯域幅にあることを示しています。

結論と提言

モデルを GPU メモリに完全にロードできない場合は、Unsloth AI の 1.73 ビット動的量子化バージョンの方が明らかに実用的です。このバージョンは、4 ビット量子化バージョンよりも高速で、使用するリソースが少なく、パフォーマンスも大幅に劣ることはありません。

実務経験に基づくと、コンシューマーグレードのハードウェアでは、「短く、素早く、簡単な」軽量タスク(短いテキスト生成やシングルターンの対話など)に使用することをお勧めします。長い思考プロセスや複数ターンの対話を必要とするシナリオは避けてください。コンテキストの長さが長くなるにつれて、モデルの生成速度は徐々に低下し、1~2トークン/秒という苛立たしい状態になります。

導入プロセス中に、どのような発見や疑問がありましたか?ぜひコメント欄で共有してください!

注1:

次のコマンドで、Homebrew を使用して llama.cpp をインストールする必要がある場合があります。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install llama.cpp

次に、次のように llama-gguf-split を使用して分割されたファイルを結合します。

llama-gguf-split --merge DeepSeek-R1-UD-IQ1_M-00001-of-00004.gguf DeepSeek-R1-UD-IQ1_S.gguf llama-gguf-split --merge DeepSeek-R1-Q4_K_M-00001-of-00009.gguf DeepSeek-R1-Q4_K_M.gguf

(もっと良い方法があればコメント欄で教えてください。)

注2:

ollama モデルの保存パスを変更するには、次のコマンドを実行します。

sudo systemctl edit ollama

2 行目の後 (つまり、「### ここと以下のコメントの間にある内容はすべてドロップイン ファイルの内容になります」と「### このコメント以下の編集内容は破棄されます」の間) に、次のコードを挿入します。

 [Service]

ここでは、次のような ollama のその他の実行パラメータも設定できます。

Environment="OLLAMA_FLASH_ATTENTION=1" # 启用Flash Attention Environment="OLLAMA_KEEP_ALIVE=-1" # 保持模型常驻内存

  • 詳細については、公式ドキュメントを参照してください: https://github.com/ollama/oll...

変更を加えて保存したら、ollama サービスを再起動します。

sudo systemctl restart ollama

いいね (3件のいいね!)↓