iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
生成式 AI

30天製作生成式AI的互動網頁專案系列 第 4

Day-4 Phi-4-mini模型下載及測試

  • 分享至 

  • xImage
  •  

今天是鐵人賽第四天的文章,今天會講解Phi-4-mini的模型下載及測試。


首先在要使用Phi-4-mini的模型之前要先將模型下載下來,先附上程式碼:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
torch.random.manual_seed(0)
model_id = "microsoft/Phi-4-mini-reasoning"
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="cuda",
    torch_dtype="auto",
    trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained(model_id)

save_path = "microsoft/Phi-4-mini-reasoning"
model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)

model_path = "microsoft/Phi-4-mini-reasoning"

model2 = AutoModelForCausalLM.from_pretrained(
    model_path,
    device_map="cuda",
    torch_dtype="auto",
    trust_remote_code=True,
)
tokenizer2 = AutoTokenizer.from_pretrained(model_path)

def chat(prompt):
    inputs = tokenizer2.apply_chat_template([{
    "role": "user",
    "content": prompt
    }],add_generation_prompt=True,
        return_dict=True,
        return_tensors="pt",
    )

    outputs = model2.generate(
        **inputs.to(model2.device),
        max_new_tokens=32768,
        temperature=0.8,
        top_p=0.95,
        do_sample=True,
    )
    outputs = tokenizer2.batch_decode(outputs[:, inputs["input_ids"].shape[-1]:])
    return outputs



while(True):
    inp = "hi"
    inp = input("enter text:")
    if(inp == "exit()"):
        break
    print(chat(inp))

接下來我將部分講解程式碼內容:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
torch.random.manual_seed(0)

上面這部分主要是進行匯入 PyTorch 與 Hugging Face Transformers 的必要模組,設定亂數種子為 0,確保每次生成的內容一致。

model_id = "microsoft/Phi-4-mini-reasoning"
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="cuda",
    torch_dtype="auto",
    trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained(model_id)

上面這部分是指定模型ID,這裡使用微軟的Phi-4-mini-reasoning模型,使用from_pretrained()從Hugging Face Hub下載模型和tokenizer,使用 GPU (device_map="cuda") 加速推論,torch_dtype="auto":自動選擇最佳資料型態(如 float16),trust_remote_code=True:允許執行模型作者自定義的 Python 代碼。

save_path = "microsoft/Phi-4-mini-reasoning"
model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)

這部分是把前面下載的模型與 tokenizer 存到本地路徑中,以便重複使用時不需重新下載。

model_path = "microsoft/Phi-4-mini-reasoning"
model2 = AutoModelForCausalLM.from_pretrained(
    model_path,
    device_map="cuda",
    torch_dtype="auto",
    trust_remote_code=True,
)
tokenizer2 = AutoTokenizer.from_pretrained(model_path)

這部分是從本地目錄重新載入模型與 tokenizer,和上面功能類似,只是這次不從網路下載,而是從已儲存的資料夾讀取。

def chat(prompt):
    inputs = tokenizer2.apply_chat_template([{
        "role": "user",
        "content": prompt
    }], add_generation_prompt=True, return_dict=True, return_tensors="pt")

    outputs = model2.generate(
        **inputs.to(model2.device),
        max_new_tokens=32768,
        temperature=0.8,
        top_p=0.95,
        do_sample=True,
    )
    outputs = tokenizer2.batch_decode(outputs[:, inputs["input_ids"].shape[-1]:])
    return outputs

這部分是使用 tokenizer2.apply_chat_template 準備對話格式(符合 Phi 模型需求),generate() 是語言模型生成回應的核心函數:
max_new_tokens=32768:最多生成這麼多新詞。
temperature=0.8:控制生成隨機性。
top_p=0.95:nucleus sampling,保留累積機率達 95% 的詞彙作為候選。
do_sample=True:啟用隨機抽樣生成。
將生成的 tokens 轉換回文字並回傳。

while(True):
    inp = "hi"
    inp = input("enter text:")
    if(inp == "exit()"):
        break
    print(chat(inp))

最後這部分是進入一個無限迴圈,讓使用者輸入問題,若輸入 exit() 則跳出程式,否則傳入 chat() 函數,取得回應後印出。


上一篇
Day-3 huggingface的運用及Phi-4-mini模型介紹
下一篇
Day-5 flask網頁設計的基礎-1
系列文
30天製作生成式AI的互動網頁專案6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言