🔣
今更だけど DeepSeek R1 使ってみた(Ollama on Jetson)
はじめに
この記事は LLM の性能評価ではなく、セットアップの記録です。
動作条件は以前の記事の通りで、Ollama を前提にしています。
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