bfloat16でなくfloat16による量子化
#1
by
alfredplpl
- opened
こんにちは
質問があります。
もとのモデルはbfloat16なんですが、
float16で正常に動作できるのでしょうか?
いろいろ試行錯誤してエラーをなくしました。
まず、このモデルはtritonが必要らしいのでが必要なので、
pip install auto-gptq[triton]==0.4.2
をしました。最新の0.5.0ではバグるようです。
次にプロンプトが対話用になってなかったので修正しました。
# Check transformers version
assert transformers.__version__ >= "4.34.1"
# Tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
# Model
model = AutoGPTQForCausalLM.from_quantized(model_name_or_path,
use_safetensors=True,
inject_fused_attention=True,
inject_fused_mlp=True,
device="cuda:0",
use_triton=True,
quantize_config=None,
use_cuda_fp16=True,
torch_dtype=torch.float16)
# Your test prompt
prompt = """
USER: 今日の夕食のレシピを紹介してください。
ASSISTANT:
"""
input_ids = tokenizer.encode(prompt, return_tensors="pt")
output_ids=model.generate(
input_ids=input_ids.to(model.device),
max_new_tokens=128
)
print(tokenizer.decode(output_ids[0]))
"""
としたところ、エラーなく次のように出力しました。
USER: 今日の夕食のレシピを紹介してください。
ASSISTANT:
<|endoftext|>
しかし、明らかにおかしいので、model.generate(...,do_sample=True)を入れると、
RuntimeError: probability tensor contains either `inf`, `nan` or element < 0
となり、計算不能になりました。
この原因はおそらくbfloat16の値域がfloat16よりも広いために起こっています。
そこで質問なのですが、もとのモデルはbfloat16なんですが、float16で正常に動作できるのでしょうか?
よろしくお願いします。
alfredplpl
changed discussion title from
bfloat16でなくfloat16による量子化への質問
to bfloat16でなくfloat16による量子化
ご質問ありがとうございます。
ご指摘のとおり、元モデルはbfloat16でfloat16になっていることにより正常に動作しておりませんでしたので、
bfloat16で作り直して再度アップロードいたしました。
また、README.mdの記載コードも修正しました。
use_triton=TrueはcolabのT4で再起動がかかってしまう謎の挙動となってしまうため、
warningは出ますがひとまず外してあります。
お手数おかけして申し訳ないです。
助かりました、ありがとうございます!
ご対応ありがとうございました。お陰様で4bit量子化したモデルが使えるようになりました。
なお、動作確認として使った正常動作するサンプルコードと正常動作したした結果を貼ります。
from auto_gptq import AutoGPTQForCausalLM
from transformers import AutoTokenizer
model_name_or_path = "mmnga/cyberagent-calm2-7b-chat-GPTQ-calib-ja-1k"
# Tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
# Model
model = AutoGPTQForCausalLM.from_quantized(model_name_or_path,
use_safetensors=True,
device="cuda:0",
use_triton=True,
quantize_config=None)
# Your test prompt
prompt = """
USER: 今日の夕食のレシピを紹介してください。
ASSISTANT:
"""
input_ids = tokenizer.encode(prompt, return_tensors="pt")
output_ids=model.generate(
input_ids=input_ids.to(model.device),
max_new_tokens=300,
do_sample=True,
temperature=0.7,
)
print(tokenizer.decode(output_ids[0], skip_special_tokens=True))
USER: 今日の夕食のレシピを紹介してください。
ASSISTANT:
今日の夕食のレシピは「鶏肉と野菜の炒め物」です。
【材料】
・鶏もも肉 150g
・キャベツ 4分の1玉
・玉ねぎ 1個
・にんじん 1本
・ピーマン 2個
・サラダ油 大さじ1
・酒 大さじ1
・醤油 大さじ1
・砂糖 大さじ1
・塩 小さじ1/4
・コショウ 少々
【作り方】
1. 野菜を食べやすい大きさに切ります。
2. フライパンにサラダ油を熱し、鶏肉を炒めます。
3. 鶏肉に火が通ったら、野菜を加えて炒めます。
4. 野菜がしんなりしてきたら、酒と醤油を加え、砂糖と塩を加え、さらに炒めます。
5. 最後にコショウで味を整えたら完成です。
【ポイント】
鶏肉は皮目から焼くことで、カリカリに焼き上がります。野菜は火が通りやすいように小さめに切ることがポイントです。甘辛い味付けでご飯が進む一品です。
alfredplpl
changed discussion status to
closed