🔣

今更だけど DeepSeek R1 使ってみた(Ollama on Jetson)

2025/03/02に公開

はじめに

この記事は LLM の性能評価ではなく、セットアップの記録です。
動作条件は以前の記事の通りで、Ollama を前提にしています。
https://zenn.dev/19931/articles/c6a2e36bf000d1

DeepSeek R1 は日本語のファインチューニングをしなくても、用途によっては充分な日本語性能が得られるようです。セットアップやパラメータ調整の手間を考えると「オリジナルモデルでいいや」という感想です。

日本語チューニングモデル

セットアップ

lightblue/DeepSeek-R1-Distill-Qwen-7B-Japanese を使ってみました。

ダウンロード・形式変換・量子化をします。

git lfs clone https://huggingface.co/lightblue/DeepSeek-R1-Distill-Qwen-7B-Japanese
$HOME/llama.cpp/convert_hf_to_gguf.py --outfile ${model}-f16.gguf ${model}
$HOME/llama.cpp/build/bin/llama-quantize ${model}-f16.gguf ${model}-Q4_K_M.gguf Q4_K_M

Ollama の deepseek-r1 を参考にしてModelfile を作成しました。

Modelfile
FROM DeepSeek-R1-Distill-Qwen-7B-Japanese-Q4_K_M.gguf
PARAMETER stop "<|begin▁of▁sentence|>"
PARAMETER stop "<|end▁of▁sentence|>"
PARAMETER stop "<|User|>"
PARAMETER stop "<|Assistant|>"
TEMPLATE """{{- if .System }}{{ .System }}{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1}}
{{- if eq .Role "user" }}<|User|>{{ .Content }}
{{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }}
{{- end }}
{{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }}
{{- end }}"""

Ollama にモデルを取り込んで実行します。

ollama create ${model}-Q4_K_M -f Modelfile
ollama run DeepSeek-R1-Distill-Qwen-7B-Japanese-Q4_K_M

入出力例

入力
適当にコードを書いてもらいます。

時刻を表示するプログラムをpythonで書いてください。時刻の表示位置は画面上をゆっくり移動させてください。時刻の更新は1秒毎にしてください。

出力
一部が日本語になっていないようです、ウィンド窗口, 时刻, animーション など。文法は大きな違和感はありません。

出力(コード部分は省略)
以下に、 requested program は、Pythonで時刻を表示し、画面内をゆっくりと移動させる program を作成します。

解説: 
    ライブラリのインポート: 
        tkinter ライブラリを使用して GUI を管理します。   
    Tkinterrootウィンドウの作成: 
        Tk クラスを使用してTkinterrootウィンド窗口を作成します。
    Canvasの追加: 
        ウィンド窗口に背景画板を追加します。
    初期位置の設定: 
        时刻文字を表示し、座標点を描写します。
    更新関数: 
        update_time() 関数で時間を更新して、位置を更新します。
    ** animーションの設け方:**
        after() メソッドを使用して1秒ごとに更新します。

コード:
(省略)

使用例: 
    ウィンド窗口の作成: 
        新しいウィンド窗口が表示されます。 
    背景画板の追加: 
        ウィンド窗口に背景画板を追加します。
    初期位置の設定: 
        时刻文字を表示し、座標点を描写します。
    ** animーションの開始:**
        update_time() 関数を呼び出すことで animーションが始まります。

メリットとデメリット: 
    性能:  time.time()は高精度で動作するため、1秒ごとに更新する場合、性能に影響を与える可能性があります。
    画面設計:  canvasのスタイルや背景色を調整し、表示が良好になるように調整します。
    ** animationsのスムージさ:** after()メソッドを使用して、1秒ごとに更新することで animーションをスムーズにすることができます。

制約: 
    time.time()は高精度で動作するため、1秒ごとに更新する場合、性能に影響を与える可能性があります。
    canvasのスタイルや背景色を調整し、表示が良好になるように調整します。
    after()メソッドを使用して、1秒ごとに更新することで animーションをスムーズにすることができます。

例:** 
以下に program の実行結果を示します。 program を実行すると、ウィンド窗口が表示され、時刻文字が連続的に更新され、位置がゆっくりと移動します。 

オリジナルモデル

セットアップ

初回実行時にモデルのダウンロードと読み込みを自動でやってくれます。

ollama run deepseek-r1:7b

入出力例

入力

時刻を表示するプログラムをpythonで書いてください。時刻の表示位置は画面上をゆっくり移動させてください。時刻の更新は1秒毎にしてください。

出力
特に違和感のない日本語のようです。

出力(コード部分は省略)
以下に、時刻を表示し画面内をゆっくり移動させるPythonプログラムを書いています。Pygameライブラリを使用します。

(省略)

このプログラムの特徴は以下の通りです:

1. Pygameライブラリを使用してグラフィックを表示します。
2. 時刻はdatetimeモジュールで取得し、毎秒更新します。
3. 文字列は画面内をゆっくり移動します(dx, dyで速度を調整できます)。
4. 画面境界にぶつかると跳ね返ります。
5. ESCキーまたはウィンドウの×ボタンで終了します。

プログラムを実行すると、時刻が画面内をゆっくり移動しながら現在時間を表示します。  
dxやdyの値を変更することで移動速度を変えられます。

Discussion