import spaces
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, TextIteratorStreamer
from threading import Thread
import os
# PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
os.environ['PYTORCH_CUDA_ALLOC_CONF'] = 'expandable_segments:True'
torch.random.manual_seed(0)
model = AutoModelForCausalLM.from_pretrained(
"NyxKrage/Microsoft_Phi-4",
device_map="cuda",
torch_dtype="auto",
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained("NyxKrage/Microsoft_Phi-4")
streamer = TextIteratorStreamer(tokenizer)
messages = [
{"role": "system", "content": "You are a helpful AI assistant."},
{"role": "user", "content": "Can you provide ways to eat combinations of bananas and dragonfruits?"},
{"role": "assistant", "content": "Sure! Here are some ways to eat bananas and dragonfruits together: 1. Banana and dragonfruit smoothie: Blend bananas and dragonfruits together with some milk and honey. 2. Banana and dragonfruit salad: Mix sliced bananas and dragonfruits together with some lemon juice and honey."},
{"role": "user", "content": "What about solving an 2x + 3 = 7 equation?"},
]
# Convert messages to the format expected by the model
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda")
generation_kwargs = dict(
input_ids=input_ids,
max_new_tokens=500,
temperature=0.0,
do_sample=False,
streamer=streamer,
)
@spaces.GPU
def tuili():
# Run the generation in a separate thread, so that we can fetch the generated text in a non-blocking way.
thread = Thread(target=model.generate, kwargs=generation_kwargs)
thread.start()
# Print the generated text in real-time
for new_text in streamer:
print(new_text, end="", flush=True)
tuili()
参考文档:https://huggingface.co/docs/transformers/v4.47.1/en/internal/generation_utils#transformers.TextStreamer