Content-Length: 328525 | pFad | https://note.com/cppp_cpchan/n/n3c1039c80dd0

DeepSeek R1をほぼ準備なしからローカルGPUで動かす|しぴちゃん
見出し画像

DeepSeek R1をほぼ準備なしからローカルGPUで動かす

しぴぴぴ!
Vtuberのしぴちゃん (https://www.youtube.com/@CP-chan)です。普段はゲーム配信しかしてませんが、たまにAIについて発信することがあります。今日はAIの記事の方。
現在はローカルAIモデルに関する連載をしています。

第一弾 本記事(DeepSeek R1をほぼ準備なしからローカルGPUで動かす)

第二弾 Cline+ローカル版DeepSeek R1でAIコーディングを使い放題にする(高スペックマシン向け)

第三弾 GPUなしでも動く!ローカルLLMとllama.vscodeでコード補完


最近話題のローカルで動くLLM、DeepSeek R1 をローカルGPU環境(NVIDIA)で動かしてみましょう。
多少のコマンドラインの操作ができれば、事前にローカルLLMを触ったことがなくてもインストールできるように書くつもりです。
サムネはDeepSeek R1くんに画像を生成してもらおうとしたところです(そんな機能はありません)。


なぜLLMをローカルで動かすのか?(1/22 追記)

この記事を読んでいる人は、LLMをローカルで動かしてみたいと思ったことがある人だと思います。ChatGPTのwebサイトなどで利用する場合と比較して、ローカルLLMの利点と欠点を理解しておきましょう。

LLMをWeb経由で使う場合とローカルで使う場合の比較

重要な点を補足します。

  1. モデルの性能:
    ChatGPT o1 proやGemini proを始めとする最強クラスのモデルは公開されていません。また、Llama-3.1 405Bなどは公開されていますが巨大すぎてローカル環境で動作させるのは困難です。
    DeepSeek R1も最大モデルは動作させられないと思います。

  2. カスタマイズ性:
    ローカル環境の最大の利点です。追加学習を行って特定のタスクに特化したりかわいくしたりと自由にモデルをカスタマイズできます。

以下のうちいくつかに当てはまるような人は、ローカル環境でLLMを実行する方が向いています。

  • オープンソース至上主義者である

  • 手間をかけてでもLLMを遊びつくしたい

  • 月額課金や従量課金を払いたくない

  • よくわからん企業に入力データを渡したくない

  • ある程度高性能なマシンを持っている

大きな問題点になっていたローカルモデルの性能の低さですが、この部分をDeepSeek R1がある程度解決してくれることを期待して、インストールを進めていきましょう。

DeepSeek R1とその性能

とりあえず動かしたいぜ!こいつが何者かには興味ないぜ!という人は「モデルを選ぶ」まで読み飛ばしてください。

DeepSeekとは、中国の杭州を拠点とするオープンなAIを開発している企業です (https://en.wikipedia.org/wiki/DeepSeek)。OpenAIに対抗することを目指しており、社名に反してクローズドなAIであるChatGPTに対してモデルを公開してくれているのが特徴です。

2025/01/20, DeepSeekの最新モデルとされるDeepSeek R1が公開されました。以下のgithubやhuggingfaceにあります。(日付を誤字ってたので修正)

DeepSeek R1はGPT-o1に匹敵する性能があると話題です
(https://gigazine.net/news/20250121-deepseek-r1-open-released/ など)
が、それは最大のモデル(671Bパラメータ)の場合で、あなたの持っているコンピュータで動かすことは現実的ではありません。
今回はDeepSeekから公開されているDistilled(蒸留)モデルを利用します。蒸留は大きいモデルをできるだけその性能を保ったまま小さいモデルにする操作で、要するにdistilledモデルならあなたのGPUでも実行できます。

DeepSeekのgithubページにはdistilledモデルの性能評価も書いてあります。性能としては、質問応答に関してはDeepSeek-R1-Distill-Qwen-7B モデルでGPT-4oよりだいぶ強く、競技プログラミングを解かせるなどのコード生成に関しては4oよりは強いけどGPT-o1 miniより弱いといったところでしょうか。

GPUがない、またはオンボードのPCでもCPUとメインメモリで動かすことはできますが、かなり遅いです。
(たぶんllama.cppをCPU版にすれば動きますが、)今回は説明は省略します。

想定環境

  • Windows 11

  • メインメモリ 32GB(もっと少なくても動く)

  • GPU NVIDIA RTX 3080 VRAM 10GB(もっと低スペックでも動く。AMDやIntelのGPUは自分で調べてください)


0. モデルを選ぶ

LLMはモデルサイズが大きいほど性能が高いことが知られており、リソースがある限り大きいモデルを利用する方が良いです。
VRAMより大きいモデルを選んでも動きますが、CPUやメインメモリを消費するし推論が遅くなります。

LLMの性能をできるだけ下げないでモデルサイズを小さくする手法にquantization (量子化)があります。これを利用すると半分~1/4くらいのVRAMで大きいモデルを動かせるようになり、結果として大きいモデルを使っても高速に推論できます。
量子化度合いが高いと性能も下がるので、同じモデルでも可能なら量子化度合いの低いものの方が良いです。

今回は、14Bのモデルに誰かが既に量子化を行ってくれた DeepSeek-R1-Distill-Qwen-14B-GGUF を使うことにします。
モデルの命名規則は、DeepSeek-R1(元のモデル)-Qwen-14B(蒸留の種類)-Q8_0(量子化の種類).gguf です。
最初Qwen-7B-Q6_Kのモデルを使って実行したのですが、日本語ダメダメだったのでQwen-14B-Q6_Kにしました。こいつは日本語を話せます。

7Bは日本語ダメ
14Bは日本語話せる

日本語性能にかなり差があるので、日本人は14B以上のモデルを使った方が良いと思います。スペックが足りない人は量子化レベルを下げたDeepSeek-R1-Distill-Qwen-14B-IQ4_XS.gguf 、もっと下げるならDeepSeek-R1-Distill-Qwen-14B-IQ2_M.gguf あたりが良いかもしれません。
スペックに余裕がある人は32Bに挑戦してもいいでしょう。

1. 環境構築

既にインストールされている場合はそれぞれ飛ばしてください。

1-1. CUDAのインストール

下の記事などを参考にしてください。自分は既に12.7がインストールされていたので飛ばします。CUDAのバージョンは11.Xか12.Xである必要があります。

1-2. w64devkitのインストール

w64devkitのリリースページから最新のリリース(例えばw64devkit-x64-2.0.0.exe)をダウンロードします。自己解凍形式です。Windows defenderがウイルスを検知した場合、除外設定をして再度解凍します。

1-3. インストールの確認

w64webkit.exe を起動し、CUDAが認識されているか確認しましょう。
nvidia-smi を実行して、最初の方の行にCUDA Version: 12.7 などの記述があればCUDAが認識されています。

2. llama.cppのインストール

llama.cppのリリースページから、最新のリリースのzipファイル二つ
cudart-llama-bin-win-cu12.4-x64.zip と llama-b{バージョン}-bin-win-cuda-cu12.4-x64.zip をダウンロードします。(1/22 ファイル名を修正)

インストールされているCUDAのバージョンが12.7でもcu12.4で動きました。インストールされているCUDAのバージョンが11.xの場合cu11.7を試してみてください。
もし動かない場合はCUDAのバージョンを12.4にしてcu12.4を試してください。
ダウンロードできたら、二つを解凍して、同じフォルダ(llama.cppなど)に配置します。

3. モデルのダウンロード

w64webkit.exe を起動し、モデルをダウンロードしたいディレクトリに移動します。今回は既に量子化済みのモデルが公開されているので、そのモデルをダウンロードするだけで動かせます。
モデルのダウンロードはwgetなどで行います。

wget https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-14B-GGUF/resolve/main/DeepSeek-R1-Distill-Qwen-14B-Q6_K.gguf

正常に終了すればモデルのダウンロードは完了です。

他のモデルを使いたい人は、huggingface.co の検索から
{元のモデル名} {量子化名} GGUF とかで検索すると有名モデルならだいたいリポジトリが出てきます。
例: "DeepSeek-R1-Distill-Qwen-7B Q6_0 GGUF"
Files and versionsタブから欲しいモデルのggufファイルにアクセスし、Downloadボタンからダウンロードできます。

4. サーバーの起動

llama-server.exe -m model.gguf

でサーバーが起動します。-m の後ろの .gguf ファイルを自分が設置したモデルファイルにしてください。

server is listening on http://127.0.0.1:8080 - starting the main loop
と最後の方に表示されたら成功です。
ブラウザでhttp://127.0.0.1:8080 にアクセスするとLLMと対話できます。

5. 推論速度のチューニング

タスクマネージャーを見てみましょう。GPUのVRAM(専用 GPU メモリ)が余っている場合、VRAMにもっとデータを配置することで推論速度を向上させることができます。

 llama-server.exe --help

を実行すると膨大な量のオプションが出てきますが、主にチューニングしたいのは -ngl (GPUに置くレイヤー数)、 -b (バッチサイズ)、 --parallel (同時に処理できるリクエスト数)です。

-ngl は、メモリをオーバーしない範囲で大きい方が速いです。オーバーすると最悪ブルースクリーンになるので、タスクマネージャーを見ながら多少余裕を持たせた設定にしてください。何も設定しないとほとんどGPUを使ってくれないので、何か設定した方がいいと思います。
-b のデフォルトは2048です。負荷に余裕があれば4096を指定してもいいです。推論時に高負荷に張り付く場合は1024にした方が速いこともあります。
--parallel は、並列に処理する予定がないなら1に設定するか何も書かないでよいでしょう。
自分の設定は、RTX 3080 VRAM 10G + メインメモリ32G,
DeepSeek-R1-Distill-Qwen-14B-Q6_K.gguf で
-ngl 28 -b 2048 です。
DeepSeek-R1-Distill-Qwen-32B-Q4_K_S.gguf では-ngl 28だとVRAMがギリギリすぎたので、
-ngl 26 -b 2048 にしました。

llama-server.exe -m ../LLM-models/DeepSeek-R1-Distill-Qwen-14B-Q6_K.gguf -ngl 28 -b 2048

自分の環境とモデルに合わせて適宜調整してください。

1/22 追記: temperatureの設定

モデルのページ(https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B )には、temperatureを0.5--0.7の間にするのが推奨と書かれています。
Temperatureは推論時の出力のランダム性をコントロールするパラメータで、低いほど同じ入力に対して毎回同じ結果を返し、高いほどランダム性が高くなります (see https://www.ibm.com/think/topics/llm-temperature etc.)
今回は推奨値の中間の0.6を設定しておきましょう。
Temperatureは起動後にllama.cppのブラウザ画面にある歯車マークの設定からも変更できますが、毎回手動で設定するのは面倒です。
コマンドラインの引数に --temp 0.6 を追加すればOKです。

llama-server.exe -m ../LLM-models/DeepSeek-R1-Distill-Qwen-14B-Q6_K.gguf --temp 0.6 -ngl 28 -b 2048

1/24 追記:より高速なパラメータの設定

14Bのモデルは全部で49層、32Bは65層です。
VRAM (専用GPUメモリ)をオーバーした値の -ngl を設定すると llama.cpp は共有GPUメモリ(VRAMが足りないときにメインメモリをGPU用に割り当てる領域)を使用するのですが、その方が高速に推論できるようです。
全部載せられるのであれば -ngl 99 などと書いても大丈夫なようです。

また、--parallel を設定する場合はllama-serverではコンテキストウィンドウを長く設定しないといけない (https://github.com/ggerganov/llama.cpp/discussions/4130#discussioncomment-11361849) らしいので、--parallelの設定を削除してコンテキストウィンドウを広く使えるようにします。少し遅くなって少し賢くなります。

llama-server.exe -m ../LLM-models/DeepSeek-R1-Distill-Qwen-14B-Q6_K.gguf -ngl 49 -b 2048 --temp 0.6

このパラメータだと14B-Q6_Kでは5 words/secくらい、14B-Q4_K_Mでは10 words/secくらい出ます。32Bは動くけどめっちゃ重い、という感じ。

1/28 追記:サイバーエージェントによる日本語対応版の公開について

2025年1月27日、株式会社サイバーエージェントからDeepSeek-R1の蒸留モデルに日本語データによる追加学習を行ったLLM「DeepSeek-R1-Distill-Qwen-14B/32B-Japanese」が公開されました。

サイバーエージェントのリポジトリは量子化前のsafetensor形式ですが、すでにhuggingfaceでbluepen5805氏が量子化済みggufを公開してくれているようです。日本語での対話がメインの場合、こちらの導入を検討してもよいでしょう。

いいなと思ったら応援しよう!









ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: https://note.com/cppp_cpchan/n/n3c1039c80dd0

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy