🐳DeepSeek-OCR: 実行とファインチューニング
DeepSeek-OCR をローカルで実行・ファインチューニングする方法のガイド。
最終更新
役に立ちましたか?
役に立ちましたか?
uv venv
source .venv/bin/activate
# v0.11.1リリースまで、nightlyビルドからvLLMをインストールする必要があります
uv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightlyfrom vllm import LLM, SamplingParams
from vllm.model_executor.models.deepseek_ocr import NGramPerReqLogitsProcessor
from PIL import Image
# モデルインスタンスを作成
llm = LLM(
model="unsloth/DeepSeek-OCR",
enable_prefix_caching=False,
mm_processor_cache_gb=0,
logits_processors=[NGramPerReqLogitsProcessor]
)
# 画像ファイルを使ってバッチ入力を準備
image_1 = Image.open("path/to/your/image_1.png").convert("RGB")
image_2 = Image.open("path/to/your/image_2.png").convert("RGB")
prompt = "<image>\nFree OCR."
model_input = [
{
"prompt": prompt,
"multi_modal_data": {"image": image_1}
},
{
"prompt": prompt,
"multi_modal_data": {"image": image_2}
}
]
sampling_param = SamplingParams(
temperature=0.0,
max_tokens=8192,
# ngram ロジットプロセッサ引数
extra_args=dict(
ngram_size=30,
window_size=90,
whitelist_token_ids={128821, 128822}, # ホワイトリスト: <td>, </td>
),
skip_special_tokens=False,
)
# 出力を生成
model_outputs = llm.generate(model_input, sampling_param)
# 出力を表示
for output in model_outputs:
print(output.outputs[0].text)from unsloth import FastVisionModel
import torch
from transformers import AutoModel
import os
os.environ["UNSLOTH_WARN_UNINITIALIZED"] = '0'
from huggingface_hub import snapshot_download
snapshot_download("unsloth/DeepSeek-OCR", local_dir = "deepseek_ocr")
model, tokenizer = FastVisionModel.from_pretrained(
"./deepseek_ocr",
load_in_4bit = False, # メモリ使用量を減らすために4bitを使用可能。16bit LoRAの場合はFalse。
auto_model = AutoModel,
trust_remote_code = True,
unsloth_force_compile = True,
use_gradient_checkpointing = "unsloth", # 長コンテキスト用はTrueまたは"unsloth"
)
prompt = "<image>\nFree OCR. "
image_file = 'your_image.jpg'
output_path = 'your/output/dir'
res = model.infer(tokenizer, prompt=prompt, image_file=image_file, output_path = output_path, base_size = 1024, image_size = 640, crop_mode=True, save_results = True, test_compress = False)============================================================
ベースラインモデル性能
============================================================
サンプル数:200
平均CER:149.07%
中央値CER:80.00%
標準偏差:310.39%
最小CER:0.00%
最大CER:3500.00%
============================================================
ベスト予測(最小CER):
サンプル5024(CER:0.00%)
参照: چون هستی خیلی زیاد...
予測: چون هستی خیلی زیاد...
サンプル3517(CER:0.00%)
参照: تو ایران هیچوقت از اینها وجود نخواهد داشت...
予測: تو ایران هیچوقت از اینها وجود نخواهد داشت...
サンプル9949(CER:0.00%)
参照: کاش میدونستم هیچی بیخیال...
予測: کاش میدونستم هیچی بیخیال...
ワースト予測(最大CER):
サンプル11155(CER:3500.00%)
参照: خسو...
予測: \[ \text{CH}_3\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}...
サンプル13366(CER:1900.00%)
参照: مشو...
予測: \[\begin{align*}\underline{\mathfrak{su}}_0\end{align*}\]...
サンプル10552(CER:1014.29%)
参照: هیییییچ...
予測: e============================================================
ファインチューニング済みモデル性能
============================================================
サンプル数:200
平均CER:60.43%
中央値CER:50.00%
標準偏差:80.63%
最小CER:0.00%
最大CER:916.67%
============================================================
ベスト予測(最小CER):
サンプル301(CER:0.00%)
参照: باشه بابا تو لاکچری، تو خاص、 تو خفن...
予測: باشه بابا تو لاکچری、 تو خاص、 تو خفن...
サンプル2512(CER:0.00%)
参照: از شخص حاج عبدالله زنجبیلی میگیرنش...
予測: از شخص حاج عبدالله زنجبیلی میگیرنش...
サンプル2713(CER:0.00%)
参照: نمی دونم والا تحمل نقد ندارن ظاهرا...
予測: نمی دونم والا تحمل نقد ندارن ظاهرا...
ワースト予測(最大CER):
サンプル14270(CER:916.67%)
参照: ۴۳۵۹۴۷۴۷۳۸۹۰...
予測: پروپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپیپریپریپریپریپریپریپریپریپریپریپریپریپریپر...
サンプル3919(CER:380.00%)
参照: ۷۵۵۰۷۱۰۶۵۹...
予測: وادووووووووووووووووووووووووووووووووووو...
サンプル3718(CER:333.33%)
参照: ۳۲۶۷۲۲۶۵۵۸۴۶...
予測: پُپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُ...