python调用transformer示例、transformer规范等 文章目录安装依赖本地调用示例-基础版本地调用-pipeline简化版api调用(见openAI笔记)训练及保存(见其他笔记)AutoModelForCausalLMfrom_pretrained()from_pretrained()-最常用完整版代码带注释from_pretrained()-参数说明cpu环境代码cpu4bit量化(最快)gpu环境小技巧如何实现不匹配返回0让大模型不学习?其他文档transformer在人工智能中特别是深度学习这一块非常重要相当于人工智能的基石。这里只演示回答问题训练及保存见其他笔记。安装依赖pip install transformers peft accelerate torch datasets本地调用示例-基础版fromtransformersimportAutoTokenizer,AutoModelForCausalLMimporttorch# 1. 指定模型名称 (也可以替换为本地路径 ./my_local_model)model_nameQwen/Qwen2.5-7B-Instructprint(f正在加载模型:{model_name}...)# 2. 加载分词器 (Tokenizer) - 负责将文字转为数字tokenizerAutoTokenizer.from_pretrained(model_name,trust_remote_codeTrue)# 3. 加载模型权重 (Model) - 负责计算# device_mapauto 会自动检测并使用 GPU如果没有 GPU 则用 CPUmodelAutoModelForCausalLM.from_pretrained(model_name,torch_dtypetorch.float16,# 使用半精度节省显存device_mapauto,trust_remote_codeTrue)# 4. 准备输入数据 (构建 Prompt)messages[{role:system,content:你是一个有用的助手。},{role:user,content:请用一句话解释什么是远程过程调用 (RPC)。}]# 应用聊天模板 (Chat Template)将对话列表转换为模型能理解的文本格式texttokenizer.apply_chat_template(messages,tokenizeFalse,add_generation_promptTrue)model_inputstokenizer([text],return_tensorspt).to(model.device)print(正在生成回复...)# 5. 生成推理 (核心 API 调用)generated_idsmodel.generate(**model_inputs,max_new_tokens512,# 最大生成长度do_sampleTrue,# 开启采样使回答更自然temperature0.7,# 温度参数越高越随机top_p0.9# 核采样参数)# 6. 解码输出generated_ids[output_ids[len(input_ids):]forinput_ids,output_idsinzip(model_inputs.input_ids,generated_ids)]responsetokenizer.batch_decode(generated_ids,skip_special_tokensTrue)[0]print(\n--- 模型回复 ---)print(response)本地调用-pipeline简化版fromtransformersimportpipeline# 自动下载模型并创建管道 (本地运行)# tasktext-generation 告诉它我们要做什么generatorpipeline(text-generation,modelQwen/Qwen2.5-7B-Instruct)# 直接调用messages[{role:user,content:Python 和 Java 有什么区别}]responsegenerator(messages,max_new_tokens200)print(response[0][generated_text])api调用(见openAI笔记)略训练及保存(见其他笔记)略AutoModelForCausalLMfrom_pretrained()from_pretrained是预训练方法特别重要的一个方法。from_pretrained()-最常用完整版代码带注释modelAutoModelForCausalLM.from_pretrained(# 1. 模型名称或本地路径必填pretrained_model_name_or_pathQwen/Qwen2.5-1.5B-Instruct,# 2. 4bit 量化你现在最需要quantization_configbnb_config,# 3. 设备自动分配cpu / cudadevice_mapcpu,# 或 auto / cuda# 4. 降低CPU内存使用low_cpu_mem_usageTrue,# 5. 数据类型CPU必须用float32torch_dtypetorch.float32,# 6. 信任远程代码有些模型需要trust_remote_codeFalse,# 7. 不加载权重仅测试force_downloadFalse,)from_pretrained()-参数说明参数名类型说明示例pretrained_model_name_or_pathstr(必填) 模型名称或本地路径。1. Hugging Face ID:Qwen/Qwen2.5-1.5B-Instruct2. 本地路径:./models/qwen-1.5b3. 快照ID:Qwen/Qwen2.5-1.5B-Instruct/snapshot/abc123Qwen/Qwen2.5-1.5B-Instructdevice_mapstr/dict设备映射策略。-auto: 自动分配 (优先 GPU不够放 CPU/磁盘)。-cuda:0: 强制全量放在第一张显卡。-cpu: 强制放在 CPU。-{: cpu}: 显式指定。GTX 850M:cuda:0(配合max_memory)纯 CPU:cpumax_memorydict限制每张卡/CPU 的最大显存/内存使用量。格式{设备ID: 容量字符串}。防止占满显存导致系统卡死。GTX 850M:{0: 1800MiB}(留余量给系统)CPU: 通常不设或设{ cpu: 10GiB }offload_folderstr当显存/内存不足时将部分权重卸载到硬盘的文件夹路径。需配合device_mapauto使用。如果 2G 显存实在不够可设./offload但速度会极慢。quantization_configBitsAndBytesConfig4-bit/8-bit 量化配置对象。这是加载 4-bit 模型的唯一入口。必须传入由BitsAndBytesConfig初始化的对象。quantization_configbnb_config(必传)torch_dtype/dtypetorch.dtype/str加载权重的数据类型。-torch.float16: 半精度 (省显存GPU 常用)。-torch.bfloat16: BF16 (新显卡常用)。-torch.float32: 全精度 (CPU 常用稳定)。注新版推荐用dtype旧版用torch_dtype。GPU:torch.float16CPU:torch.float32low_cpu_mem_usagebool低 CPU 内存模式。True: 避免在加载过程中将完整模型载入 CPU 内存直接分片加载到目标设备。加载大模型时建议始终开启。True(推荐防止加载瞬间爆内存)trust_remote_codebool是否信任远程代码。许多国产模型 (如 Qwen, ChatGLM) 包含自定义的 Python 代码 (modeling_xxx.py)。设为True才能加载这些模型。Qwen 系列必须设为Truerevisionstr指定加载模型的特定分支、Tag 或 Commit Hash。用于复现特定版本或测试未合并的模型。默认maincache_dirstr自定义模型缓存下载目录。默认在~/.cache/huggingface。—force_downloadbool强制重新下载模型忽略本地缓存。—resume_downloadbool允许断点续传 (新版本默认开启)。—local_files_onlybool只读取本地文件不尝试联网。联网失败时很有用。—use_safetensorsbool是否优先加载.safetensors格式 (更安全、加载更快)。默认True。—cpu环境代码modelAutoModelForCausalLM.from_pretrained(Qwen/Qwen2.5-1.5B-Instruct,device_mapcpu,low_cpu_mem_usageTrue,torch_dtypetorch.float32,)cpu4bit量化(最快)modelAutoModelForCausalLM.from_pretrained(Qwen/Qwen2.5-1.5B-Instruct,quantization_configbnb_config,device_mapcpu,low_cpu_mem_usageTrue,torch_dtypetorch.float32,)gpu环境modelAutoModelForCausalLM.from_pretrained(Qwen/Qwen2.5-1.5B-Instruct,device_mapauto,torch_dtypetorch.float16,)小技巧如何实现不匹配返回0让大模型不学习?labels设为-100。# 【核心技巧】如何实现“不匹配则是0”# 在 Transformers 中将 labels 设为 -100计算 Loss 时会自动忽略该位置iftag1:# 匹配保留原始 ID 作为 label模型会学习labels_list.append(ids)else:# 不匹配全部填 -100模型看见但不学习 (Loss0)labels_list.append([-100]*len(ids))其他文档github transformer git地址(还可以吧比hugging face访问成功率高些)https://github.com/huggingface/transformers