Files

64 lines
1.9 KiB
Python

import torch
from transformers import AutoModel, AutoTokenizer
import argparse
import os
def convert_and_save_bf16(model_path, output_dir=None):
try:
if output_dir is None:
output_dir = model_path.strip("/") + "_bf16"
os.makedirs(output_dir, exist_ok=True)
print(f"⏳ 正在加载原始模型来自: {model_path}")
model = AutoModel.from_pretrained(
model_path,
torch_dtype=torch.bfloat16, # 初始加载为BF16
# device_map="auto", # 自动分配设备
low_cpu_mem_usage=True, # 优化内存使用
trust_remote_code=True,
)
print("🔧 正在转换模型权重到BF16...")
model = model.to(torch.bfloat16)
print(f"💾 正在保存BF16模型到: {output_dir}")
model.save_pretrained(
output_dir,
safe_serialization=True, # 使用safetensors格式
max_shard_size="6GB", # 分片大小
)
# 保存tokenizer
try:
tokenizer = AutoTokenizer.from_pretrained(
model_path, trust_remote_code=True
)
tokenizer.save_pretrained(output_dir)
except Exception as e:
print("passing save tokenzier.")
print("✅ 转换完成!保存内容:")
print(f" - 模型权重: {output_dir}/pytorch_model*.bin")
print(f" - 配置文件: {output_dir}/config.json")
print(f" - Tokenizer文件: {output_dir}/tokenizer.*")
except Exception as e:
print(f"❌ 错误发生: {str(e)}")
raise
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="转换HF模型到BF16格式")
parser.add_argument(
"model_path",
type=str,
help="输入模型路径(本地目录或HF Hub名称)",
)
parser.add_argument("--output_dir")
args = parser.parse_args()
convert_and_save_bf16(args.model_path, args.output_dir)