The MoE routing gate layers are kept in full precision to preserve expert-selection accuracy.
The lm_head is kept in full precision following standard practice.
1
2import os
3os.environ["FORCE_DISABLE_VISION"] = "1"
4
5from google.colab import userdata
6from transformers import AutoTokenizer, AutoModelForCausalLM
7import torch
8
9HF_TOKEN = userdata.get('HF_TOKEN')
10USERNAME = "frankmorales2020"
11REPO_ID = f"{USERNAME}/Mixtral-8x7B-Instruct-v0.1-fp8"
12
13tokenizer = AutoTokenizer.from_pretrained(REPO_ID, token=HF_TOKEN)
14
15# Fix: explicitly set pad_token to eos_token
16tokenizer.pad_token = tokenizer.eos_token
17tokenizer.padding_side = "left" # left-pad for decoder-only models
18
19model = AutoModelForCausalLM.from_pretrained(
20 REPO_ID,
21 token=HF_TOKEN,
22 device_map="auto",
23 dtype=torch.bfloat16,
24)
25
26# Fix: set pad_token_id on the model config too
27model.config.pad_token_id = tokenizer.eos_token_id
28
29def run_inference(prompt):
30 inputs = tokenizer(
31 f"[INST] {prompt} [/INST]",
32 return_tensors="pt",
33 padding=True,
34 ).to(model.device)
35
36 with torch.no_grad():
37 outputs = model.generate(
38 **inputs,
39 max_new_tokens=512,
40 temperature=0.7,
41 top_p=0.9,
42 do_sample=True,
43 pad_token_id=tokenizer.eos_token_id, # silences the warning
44 )
45
46 return tokenizer.decode(
47 outputs[0][inputs["input_ids"].shape[1]:],
48 skip_special_tokens=True
49 ).strip()
50
51prompts = [
52 "Explain mixture of experts architecture in simple terms.",
53 "Write a Python function to compute the Fibonacci sequence.",
54 "What are the advantages of FP8 quantization over INT8?",
55]
56
57for prompt in prompts:
58 print(f"\n{'='*60}")
59 print(f"PROMPT: {prompt}")
60 print(f"{'='*60}")
61 print(f"RESPONSE:\n{run_inference(prompt)}")
62 print()
63