名古屋出身ソフトウェアエンジニアのブログ

日本語 DeepSeek-R1 Qwen 蒸留 32B のローカル実行を試す

公開:
更新:

Ollama を使用して、CyberAgent が日本語データで追加学習した DeepSeek-R1 Qwen 蒸留のローカル実行を試します。いまだに Ollama 使用経験がなく、今回初使用でした。

DeepSeek-V3 vs. DeepSeek-R1

実験環境

  • Ryzen 9 5950X
  • 128GB RAM
  • GeForce RTX 3090 24GB VRAM
  • Windows 11 Pro
  • CUDA 11.6

Ollama のダウンロード

GitHub のリリースページから、Ollama の Windows 用バイナリ (ZIP) をダウンロードします。

GitHub - ollama/ollama: Get up and running with Llama 3.3, DeepSeek-R1, Phi-4, Gemma 2, and other large language models.
Get up and running with Llama 3.3, DeepSeek-R1, Phi-4, Gemma 2, and other large language models. - ollama/ollama

いろいろと Self-Contained なので、バイナリのサイズが大きいです。ダウンロード後、適当なディレクトリに展開します。 Path は通さなくても十分使えるでしょう。

PS C:\ollama-windows-amd64> .\ollama.exe -h
Large language model runner

Usage:
  ollama [flags]
  ollama [command]

Available Commands:
  serve       Start ollama
  create      Create a model from a Modelfile
  show        Show information for a model
  run         Run a model
  stop        Stop a running model
  pull        Pull a model from a registry
  push        Push a model to a registry
  list        List models
  ps          List running models
  cp          Copy a model
  rm          Remove a model
  help        Help about any command

Flags:
  -h, --help      help for ollama
  -v, --version   Show version information

Use "ollama [command] --help" for more information about a command.

サーバー起動

Ollama は Docker デーモンのように、操作を受け付けるサーバーを常駐させておく必要があります1

.\ollama.exe serve

モデルファイルのダウンロード

CyberAgent が日本語データで追加学習したモデルを使います。

以下から、有志により量子化されたモデルファイル (GGUF) をダウンロードします。いつも通り Q5_K_M を選択しました。メモリ使用量を抑える場合は Q4_K_M を選択すると良いでしょう。

mmnga/cyberagent-DeepSeek-R1-Distill-Qwen-32B-Japanese-gguf · Hugging Face

モデル設定の作成

Ollama にモデル構成を登録するために、Dockerfile のようなモデル設定ファイルを作成します。書式はここに記載されています。

FROM はモデルファイルの指定であり、これだけが唯一の必須項目です。

FROM ./models/cyberagent-DeepSeek-R1-Distill-Qwen-32B-Japanese-Q5_K_M.gguf

SYSTEM """あなたは役立つ AI アシスタントです"""

TEMPLATE """{{ if .System }}{{ .System }}{{ end }}{{ if .Prompt }}<|User|>{{ .Prompt }}{{ end }}<|Assistant|>"""

TEMPLATE は会話コンテキストのトークン構文を記述するためのものです。 Ollama が Go 言語で実装されていることから、TEMPLATE は Go 言語のテンプレート構文を使います2。ユーザー持ち込みのモデルの場合、デフォルトだと TEMPLATE """{{ .Prompt }}""" という、ただユーザー入力を渡すだけのテンプレートが設定されています。

SYSTEM の内容は TEMPLATE の中の {{ .System }} に渡されます。

DeepSeek-R1 の場合、以下のような形式に従う必要があるので、上記のテンプレートをカスタマイズする必要があったのです3

<|begin▁of▁sentence|>{system_prompt}<|User|>{prompt}<|Assistant|>

モデル設定ファイルができたら、Docker イメージを作るように、Modelfile からモデルを作成します。ここでは、deepseekr1test という名前で作成しています。同名でモデルを作成すると、上書き更新になります。

PS C:\ollama-windows-amd64> .\ollama.exe create deepseekr1test -f Modelfile
gathering model components
copying file sha256:559fb24667cb2b6687b313f842fe7736fd98a327e1df2d37a9ffabcb74902b8e 100%
parsing GGUF
using existing layer sha256:559fb24667cb2b6687b313f842fe7736fd98a327e1df2d37a9ffabcb74902b8e
using existing layer sha256:82f415ca607e6619f8a6f2eef31cccdeef82a2d93d5019f1b77a57713234957f
using existing layer sha256:73a6faa125a7529bda80b2072a0615f8ccc47685738a4dd2b2ef1be3ee806a15
writing manifest
success

list コマンドで、作成したモデル一覧を確認できます。

PS C:\ollama-windows-amd64> .\ollama.exe list
NAME                     ID              SIZE     MODIFIED
deepseekr1test:latest    e797372a23f7    23 GB    3 minutes ago

show コマンドで、モデルの詳細を確認できます。

PS C:\ollama-windows-amd64> .\ollama.exe show deepseekr1test
  Model
    architecture        qwen2
    parameters          32.8B
    context length      131072
    embedding length    5120
    quantization        Q5_K_M

  System
    あなたは役立つ AI アシスタントです

モデルの実行

run コマンドで、対話プログラムが起動します。

.\ollama.exe run deepseekr1test

あとは、普通にシェルのように対話できます。

挨拶するだけで、この長考ぶりである

挨拶するだけで、この長考ぶりである

対話コンテキストを消去する場合は /clear コマンドを使います。

モデルのテスト

サービス版では規制されている内容も、ローカルでは回答できます。

>>> くまのプーさんについて何か教えて

<think> ユーザーが「くまのプーさんについて何か教えて」と質問してきたので、まずは基本情報を整理する必要がありますね。アーサー・ウィリアムズ・ミルンが1926年に発表した『 Winnie-the-Pooh 』から始まったことを確認します。

次に、キャラクターの特徴を考えます。プーさんの愛されポイントは、ハチミツへの執着とユーモラスな性格ですね。仲間たちとの友情も重要な要素です。ピグレットやイーヨーやキルギンズが登場するので、それぞれの関係性にも触れるべきでしょう。

文化への影響についても触れたいところです。ミッキーマウスとのコラボや映画化、最近の『カムバック・ウィズ・ユー』への登場を調べます。特に『くまのプーさん おしゃべりハチミツ桶』は多くの人から愛されているので、その点もポイントにします。

ユーザーが求めているのは表面的な情報ではなく、深みのある知識かもしれませんが、まずは基本的な歴史と人気の理由を簡潔にまとめることを心がけます。また、子どもだけでなく大人にもアピールする要素があることも強調したいですね。

最後に、最近の動向やファン層の広さについても簡単に触れると、ユーザーの興味を引きつつ深い知識を感じさせることができるでしょう。全体として、バランスよく重要なポイントを挙げながら、読みやすくまとめることが大切です。 </think>

くまのプーさん(Winnie the Pooh)は、イギリス人作家アーサー・ウィリアムズ・ミルンが1926年に発表した児童文学『くまのプーさん』に登場する人気キャラクターです。以下、深掘りしたポイントをご紹介します。


1. プーさんの起源と性格

  • ハチミツへの執着:「朝食はハチミツ、昼ごはんもハチミツ」というほど愛好し、「ハチミツの箱の底に隠された秘密」を探究する設定がユーモラスです。
  • 哲学的思考:単純ながら深い洞察を口にする(例:「人は何かを考えているとき、たいていそれが本当になるような気がするものだ」)。
  • 社交性:100エーカーの森でピグレットやイーヨー、キルギンズなど個性的な仲間と友好的に交流します。

2. 文化への影響

  • ディズニーとのコラボ:1960年代以降、ミッキーマウスと競演し「ハチミツの森」が舞台として定着。2013年には『くまのプーさん おしゃべりハチミツ桶』で新規人気を獲得。
  • 映画化:2019年の『カムバック・ウィズ・ユー』では、大人になったピグレットやイーヨーが登場し、「幼少期の友人との別れ」に涙を誘うストーリーが話題。
  • 文学的解釈:オックスフォード大学教授らが「プーさんと仲間は、ミルン自身の戦時体験や心理分析的なテーマを反映」と指摘する学術論文も。

3. ファン層の広がり

  • 大人の愛読者:詩的でメタファーに富む会話(例:「ハチミツは言葉より心に染みる」)が哲学書と捉えられ、思春期の若者から心理学関係者まで幅広い支持。
  • サブカルチャー:ネット上で「プーさんのハチミツ論」として引用され、「人生の目標をシンプルに考える」生き方の指針として再解釈されています。

4. 現代の課題への対応

  • SNS時代との融合:2023年には「#プーさんハチミツ節約論」として、エコ活動と関連付けるトレンドが発生。
  • 多様性の象徴:キルギンズの「夜型人間」やイーヨーの「冒険家」が、社会の多様な働き方を反映する解釈も。

結論 プーさんは単なる子供向けキャラクターではなく、「人生の質を問うる哲学的思考実験」として、どの世代にも愛される普遍性を持っています。ハチミツへの執着が「自己らしさの追求」に転換されれば、現代人にとっても新たな発見があるでしょう。

見ての通り、当然ハルシネーションは起こります(キルギンズって誰だよ)。

所感

昨年、Elyza のローカルモデルで遊んでいたときとは、大きな進歩を感じました。

ちなみに、70B モデルも動かせましたが、OpenAI GPT-4o に慣れている身的には遅すぎると感じるので、32B が一番バランスが良いと感じました。


  1. 実際、Linux 向けのマニュアルではスタートアップサービスとして systemd ユニットを作成するように推奨されています。https://github.com/ollama/ollama/blob/main/docs/linux.md ↩︎

  2. Hugo のテーマ作成で使用しているので、個人的に馴染み深いです。 ↩︎

  3. BoS <|begin▁of▁sentence|> は Ollama によって入力されるので、TEMPLATE に含めてはいけません。含めると、

    check_double_bos_eos: Added a BOS token to the prompt as specified by the model but the prompt also starts with a BOS token. So now the final prompt starts with 2 BOS tokens. Are you sure this is what you want?

    と煽られます。 ↩︎