1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

流行りのDeep Seek R1, ローカルGPUで動かしcline連携してみた

Last updated at Posted at 2025-02-04

はじめに

みなさん「Deep Seek」はご存じですか?
DeepSeekは中国のAI企業 で、2025/1/20に同社の最新のLLM「DeepSeek-R1」を発表しました。
DeepSeekがもたらしたインパクトは、これまで大規模LLMを引っ張ってきたOpenAIやAnthropicなどが提供するLLMモデルに比べ圧倒的に安価ということで、Deep Seek R-1の開発費はChatGPTの10分の1とのニュースも流れてきます。
OpenAIやその他多くの大規模LLMがクローズドであるのに対して、DeepSeekはオープンソースでモデルを公開してくれているのが特徴です。

DeepSeekが何者か?などはものすごい速度でニュースやブログ記事が出されており、テクノロジーの進歩の早さもさる程ながら、情報の早さも一瞬で広がるんだなと感心している私ですが、今回はDeepSeek R1モデルを自作PCに入れ、ローカルLLMとして動かしてみようと思います。

また、生成AIによるAIコーディングを行える「Cline」というものも使ったことがなかったので、これを機にローカルLLMでClineを動かし、開発効率を爆上げしてやろうと思います。

LLMをローカルにインストールする大きなメリットは無料でAIを使用できるようになることです。
LLMをAPI経由で使用する際は回数制限や従量課金がなされますが、ローカル環境にLLMを入れることでこれらから解放されてLLMが自由に使い放題になるという点があります

使用しているPC

  • OS:Windows11 Pro (23H2)
  • CPU:intel core-i7 14700F
  • GPU:Nvidia RTX4070(12GB)
  • メモリ:32GB

特にGPUは高性能なもののほうが高速に動作し快適に使用できます

LLMモデルのダウンロード

まず最初はLLMモデルのダウンロードから行う必要があります。
自分はLLMの.safetensors.ggufなどがどういうものか詳しくは知りません。簡単に調べると以下のようなことらしいです。

safetensors

`.safetensors`は機械学習モデルのデータを保存・読み込むための新しいファイル形式です。従来のPyTorchで使われていた.pthや.pt(pickleフォーマット)の問題点を解決するために、Hugging Face社が開発しました。

簡単に言うと以下のような特徴があります:

🔒 安全: モデルファイルに悪意のあるコードが含まれる心配がありません
⚡ 高速: 従来形式と比べて約100倍速く読み込めます
💾 効率的: 必要な部分だけを読み込めるので、メモリを効率的に使えます
🔄 互換性: PyTorch、TensorFlow、JAXなど、主要なフレームワーク間で互換性があります
※https://qiita.com/yonaka15/items/e738a33cbbac1ddc0402

gguf


`.gguf`は、ローカルで大規模言語モデル(LLM)を動かす際によく用いられる`llama.cpp`で動かす際に用いられるファイル形式です。`llama.cpp`とはMeta社のLLMの1つであるLlamaモデルの重みを量子化という技術でより低精度の離散値に変換することで推論の高速化を図るツールだそうです。
数多くのLLMが公開されているHuggingFaceを介したモデル配布で一般的な「safetensors」形式のモデルを直接読み込むことはできないため、言語モデルを`llama.cpp`で扱うためにはこの`.gguf`フォーマットへの変換が必要となります。

そういえば自作PCの中でStable diffusionを動かしたときも.safetensors拡張子を見ていましたが何者かよく理解しておらず、自分の知識は.pth.onnxで止まっていました。AIの進化及びモデルの巨大化とともにモデルファイルも進化しているのですね。

Deep Seek R-1も以下のHuggingFace上で公開されています。(https://huggingface.co/deepseek-ai/DeepSeek-R1)

なので、まずはローカルで動かすための.ggufファイルを探す必要があります。
今回はサイバーエージェントが公開している日本語対応の.safetensorsから作られている以下のDeepSeek-R1-Distill-Qwen-14B-Japanese-Q4_K_M.ggufを使用しようと思います。

ちなみに、モデルにあるQ4Q5などは量子化ビット数であり、この値が小さいほど少ないビット数で表現(データが圧縮)されることになります。よって低ビット量子化はモデルが軽量となるので、動かない、もしくは動くけど動作が遅い場合はより小さいものを選択するようにしてください。

llama.cppのインストール

すでにLLMをローカルで動かすなどをしてllama.cppがインストールされている場合はスキップしてかまいません。

GitHub上の公開ページから以下の2つの.zipファイルをインストールし任意のフォルダに回答します。

  • cudart-llama-bin-win-cu12.4-x64.zip (CUDAバージョンを確認)
  • llama-b4628-bin-win-cuda-cu12.4-x64.zip
    • bxxxxの数値はその時使うバージョンに合わせて下さい

LLMの実行

上記をダウンロードしたらPowerShellを起動し以下のコマンドを打ちます。

.\llama-server.exe -m ..\gguf_models\DeepSeek-R1-Distill-Qwen-14B-Japanese-Q4_K_M.gguf

llama-server.exeを実行。引数として-m path_to.ggufを入力する

うまくいくとmain: server is listening on http://127.0.0.1:8080 - starting the main loopと出るはずなのでWebブラウザからhttp://127.0.0.1:8080にアクセスしチャットを実施する。
image.png

ここまでで、ローカル環境でLLMを動かすことができました。

Ollamaのインストール

OllamaはLLMをローカル環境で立ち上げて実行することができるオープンソースのアプリケーションであり、インターネット接続長くても高度なLLMを使用することができるようになります。llama.cppをベースに開発されており、LLMをWebAPI経由で使用するのではなくローカル環境で利用することで、データ漏えいリスクを低減することができ、さらにAPI利用コストを削減(無料)できたりと多くのメリットを得ることができます。

以下のページからダウンロードします。

Ollamaにモデル登録

Ollamaを実行するにはPowerShellなどでコマンドを打つ必要があります。

ollama run <model>

CLIについて詳しくはこちらを参考にしてください。

今回はOllamaで既にダウンロードしたggufモデルを読み込んで実行します。ここからの手順は以下のページを参考にして下し。

ggufファイルと同じフォルダにモデルの定義となるモデルファイル(今回は.model)を作成しました。

ollama create DeepSeek-R1-Distill-Qwen-14B-Japanese-Q4_K_M -f DeepSeek-R1-Distill-Qwen-14B-Japanese-Q4_K_M.model

ollamaでモデルを作成します。-fでモデルファイルを指定し実行します。成功すると以下のようになります。

image.png
※上記画像ではファイル名をミスっています。今回ダウンロードした.ggufファイルとしたいので、正確にはJapaneseを付けたものです
image.png

実行前はollama listに何もありませんでしたが、実行後は作成したモデルが追加されています。

PowerShellでollama serve(serverではない!)を実行しサーバーを起動しておきます。

Error: listen tcp 127.0.0.1:11434: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

となった場合は、右下のollamaアイコンを右クリックしOllamaを停止してください
image.png

image.png

VSCodeの設定

今回はVSCodeからClineを使用するので、拡張機能をインストールします。
image.png

インストールするとVSCode画面左にClineのアイコンが出るので選択し設定を進めます。
image.png

ここでAPIプロバイダーを選択しOpenAIを選択し、APIキーを入力...するのではなく、今回はOllamaを選択しローカルに立てたサーバーおよびモデルIDを選択します。

image.png

実行

Clineに以下の内容を指示してみました。

「現在のフォルダにCline.goファイルを作成します。
時刻時の日付と曜日を出力するコードを書き、保存してください」

image.png

実行コマンドまで教えてくれるとは、Cline便利だな。。。
生成コードの精度もほぼほぼ申し分なし!

まあ、fmt.Printf("曜日: %A\n", now.Weekday())のコード、%Aじゃなくて%sじゃないかな??

日付: 2025-02-04
時刻: 11:58PM
曜日: %!A(time.Weekday=2)
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?