【llama.cpp】MacのローカルでDeepSeek-R1を試す
はじめに
Macのローカル環境で話題のDeepSeek-R1を動かしてみたい人向けの手順解説です。
llama.cppを使ってGhatGPTライクな環境構築を行います。
動作確認環境
M1-Pro 32GB環境
環境構築
モデルダウンロード
huggingFaceからmmngaさんがgguf化してくれたモデルをダウンロードします。
メモリが少ないPCをご利用の場合は以下のもう少し小さいモデルをおすすめします。
llama.cppのビルド
llama.cppはソースコードが公開されているので、ソースコードをダウンロード後自分の環境に合わせてコンパイルすることで利用できるようになります。
以下の手順で動作環境を整えていきましょう。
llama.cppのダウンロード
gitを使ってソースコードをgithubからダウンロードします。
git clone https://github.com/ggerganov/llama.cpp.git
ダウンロード後、llama.cppディレクトリに移動します。
cd llama.cpp
モデルファイルの設置
事前にダウンロードしておいたモデルファイルをllama.cpp内のモデルファイルに移動します。
modelsファイル内に予め移動させておいてください。
llama.cppのコンパイル
以下のコマンドでllama.cppをmac用にコンパイルします。
cmake -B build
cmake --build build --config Release
少し時間がかかりますが、[100%] Built target llama-q8dot
と出てきたら完了です。
これで環境構築は完了です!
使ってみる
llama.cppサーバの起動
llama.cppディレクトリ内で以下を実行します。
〜.ggufの部分はダウンロードしたモデルに合わせて適宜修正して下さい。
./build/bin/llama-server -m models/DeepSeek-R1-Distill-Qwen-14B-Q4_K_M-00001-of-00001.gguf --port 8080
以下のようなメッセージが出たら起動完了です。
サーバへアクセス
起動した際のメッセージに従い、http://127.0.0.1:8080
にブラウザでアクセスしてください。
設定メニューを開き、temperatureの設定だけ推奨の0.5 - 0.7 のいずれかに設定すれば完了です。
temperatureの値について
公式のアナウンスで蒸留モデル利用時の値の推奨値が0.5 - 0.7で指定されています。
llama.cppのデフォルト値は0.8ですが、temperatureを下げることで事前の考察フェーズが深くなり、アウトプットの品質が向上するように見えます(私の体感
アウトプットを見てみる
プロンプト
snowparkを使ってpythonでsnowflake接続するコードを書いて。内容は日本語で解説して。
アウトプット
実行速度は少し遅い時のChatGPT-4oといったレベルでした。
日本語も問題なく扱えており、ローカルでこのレベルの応答が得られるのは感動的ですね。
※<think>タグで囲まれた部分は事前の思考フェーズです。
余談:Distillとは?
モデル名に付いている”Distill-Qwen”というものがわからなかったので、LLMに聞きながら調べてみました。(解釈違ってましたら詳しい方ご指摘ください!)
Distillは「蒸留」を指し、あるLLMの知識を別の小さなLLMに移し替えることで、
DeepSeek-R1-Distill-Qwen-14Bとは「DeepSeek-R1の知識をQwen-14Bに移し替えもの」を指しているようです。
単にDeepSeek-R1の応答を使ってファインチューニングしているというわけではなく、内部状態なども含めて引き継いでいるとのことでした。このあたりから理解についていけず脱落しました。。
まとめ
いかがだったでしょうか?今回は話題のDeepSeek-R1をMacのローカル環境で動かす方法を解説しました。
DeepSeek-R1はローカル環境でのLLM品質に大革新を起こしていますね!まだ私も使い始めたばかりなので色々試してみたいと思います!
私のXではLLMに限らず、AIを活用した業務改善情報の発信をしております。Nvidiaが使えず置いていかれがちなMac環境の実装を中心に解説・発信していますので。ご興味のある方は是非フォローをお願いします。
Discussion
わかりやすい情報ありがとうございます!
1点気になったのが
についてなのですが
とかの方が早くなって良いと思いました。(8は想定するCPU Coreの数で変えるべきですが)
コメントありがとうございます!
parallelsパラメータを付与するのはビルドの時というよりも、サーバとして起動する時でしょうか?
サーバ起動時以外のparallelsの指定ケースが見つけられておらず、ご存じであれば教えていただきたいです!
いえ、ビルド時です。
付けておくとビルドが並列で動くので待ち時間が減ります。(待てば良いだけなのですが、少しでも早く使いたいと言う気持ちです。)
cmake側のパラメータでそういった指定ができるんですね!
かなりビルドに時間がかかるのが良くないと思っていたので試してみます。ありがとうございます!