以下の内容はhttps://touch-sp.hatenablog.com/entry/2025/01/29/181314より取得しました。


「AXCXEPT」という日本の会社が公開している「phi-4-open-R1-Distill-EZOv1」というモデルを使ってみました

はじめに

Microsoftの「Phi-4」をHuggingFaceが開発している「Open R1」で学習させて論理思考モデルにしたものが「phi-4-open-R1-Distill-EZOv1」です。
huggingface.co
「Open R1」はDeepSeek-R1で用いられている方法を再現しようとしたもののようです。

関連記事

「DeepSeek-R1-Distill-Qwen-14B」の記事はこちら
touch-sp.hatenablog.com
「DeepSeek-R1-Distill-Qwen-14B-Japanese」の記事はこちら
touch-sp.hatenablog.com

Pythonスクリプト

TorchAOを使って8bit量子化を行いました。

from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer, TorchAoConfig
import torch

# model was downloaded from https://huggingface.co/AXCXEPT/phi-4-open-R1-Distill-EZOv1
model_name = "phi-4-open-R1-Distill-EZOv1"

quantization_config = TorchAoConfig("int8_weight_only", group_size=128)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=quantization_config,
    torch_dtype=torch.bfloat16,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)

streamer = TextStreamer(
    tokenizer,
    skip_prompt=True,
    skip_special_tokens=True
)


prompt = '''ある父と子の年齢に関する問題があります。条件は次の通りです:

父の現在の年齢は息子の現在の年齢の3倍です。
6年前、父の年齢は息子の年齢の5倍でした。
父と息子の年齢を求めてください。'''

messages = [
    {"role": "system", "content": "You are an excellent AI."},
    {"role": "user", "content": prompt}
]

input_tensors = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    return_tensors="pt",
    return_dict=True
).to(model.device)

input_ids = input_tensors["input_ids"]
attention_mask = input_tensors["attention_mask"]

output_ids = model.generate(
    inputs=input_ids,
    attention_mask=attention_mask,
    max_new_tokens=4096,
    pad_token_id=tokenizer.eos_token_id,
    streamer=streamer
)

結果

「thinking」と「answer」の二つが出力されます。

<thinking>
まず、問題の条件を整理します。現在の父の年齢をF、息子の年齢をSとします。

1. 現在の年齢関係:F = 3S
2. 6年前の年齢関係:F - 6 = 5(S - 6)

これらの2つの方程式を解く必要があります。まず1つ目の方程式からFをSで表します:
F = 3S

次に2つ目の方程式に代入します:
3S - 6 = 5(S - 6)
3S - 6 = 5S - 30
30 - 6 = 5S - 3S
24 = 2S
S = 12

Sが12であることが分かったので、Fを計算します:
F = 3S = 3×12 = 36

最後に、6年前の年齢関係を確認します:
父:36 - 6 = 30
息子:12 - 6 = 6
30 = 5×6 となり、条件を満たしています。

したがって、父の年齢は36歳、息子の年齢は12歳となります。
</thinking>
<answer>
父の年齢は36歳、息子の年齢は12歳です。

【計算の根拠】
1. 現在の年齢関係:F = 3S
2. 6年前の年齢関係:F - 6 = 5(S - 6)
3. 代入計算:
   3S - 6 = 5S - 30
   24 = 2S → S = 12
4. 父の年齢:3×12 = 36
5. 6年前の確認:30 = 5×6(条件成立)
</answer>

連立方程式を立てて、それを解くことができました。




以上の内容はhttps://touch-sp.hatenablog.com/entry/2025/01/29/181314より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14