【HuggingFace】模型下载至本地访问
目录
前言
一、环境依赖
方法一:在线安装依赖
方法二:预先下载 .whl 离线包安装(推荐网络不佳用户)
二、选择模型
三、下载模型至本地访问
2.1 功能说明
2.2 执行代码
2.3 代码解析
2.4 扩展:其它模型加载方式
四 、调用模型
4.1 执行代码
4.2 代码解析
五、多轮对话示例
前言
【为什么推荐本地部署?】
1️⃣ 零依赖网络和外部服务,更可靠稳定;
2️⃣ 无调用次数限制,更适合高频或批量推理;
3️⃣ 避免长期 API 费用,节省成本;
4️⃣ 保护用户隐私和数据安全;
5️⃣ 可自定义、深度优化;
6️⃣ 加载一次即可复用,低延迟高性能;
7️⃣ 离线可用(重要!)
【适合本地部署的情况】
如果你需要... 本地部署就是更优选 长期运行的 AI 服务或应用 ✅ 每天/每分钟有大量推理请求 ✅ 需要保护用户数据隐私 ✅ 自定义模型结构/调优能力 ✅ 离线环境或局域网部署 ✅ 拥有中高端显卡资源(如 RTX 3060/3090/A100) ✅
【总结一句话】
如果你有硬件资源,追求性能稳定、成本低、数据安全、灵活性高,本地部署优于 API 调用。
一、环境依赖
前提条件
安装好Anconda、Pycharm或VS code、CUDA和CUDNN(可选)
安装教程如下(按顺序安装):
【Anconda安装教程】
【Anconda安装教程】安装到环境配置全流程_anaconda安装环境配置-CSDN博客
【CUDA&CUDNN】
【CUDA&cuDNN安装】深度学习基础环境搭建_检查 cuda cudnn 安装-CSDN博客
【pytorch安装教程】
【Pytorch安装教程】深度学习框架-CSDN博客
方法一:在线安装依赖
#创建虚拟环境(虚拟环境名:learn)
conda create --name learn python=3.11#激活虚拟环境
conda activate learn#安装pytorch
pip install torch==2.7.1+cu126 torchvision==0.22.1+cu126 torchaudio==2.7.1+cu126 --index-url https://download.pytorch.org/whl/cu126 --force-reinstall --no-cache-dir#安装transformers库
pip install transformers==4.53.0
方法二:预先下载 .whl
离线包安装(推荐网络不佳用户)
1、创建虚拟环境并进入
#创建虚拟环境(虚拟环境名:learn)
conda create --name learn python=3.11#激活虚拟环境
conda activate learn
2、下载pytorch离线包
说明:pytorch安装过程可能会出现网络不稳定的情况,从而导致下载失败,可通过下载whl文件的方式进行安装
如果你网络慢或中断,可以手动下载 .whl
文件,再离线安装
手动下载以下 3 个文件(来自 PyTorch 官网):
-
torch-2.7.1+cu126-cp311-cp311-win_amd64.whl
-
torchvision-0.22.1+cu126-cp311-cp311-win_amd64.whl
-
torchaudio-2.7.1+cu126-cp311-cp311-win_amd64.whl
下载好后并确定文件路径,以下是我的文件路径:
D:\下载\windows浏览器下载\torch-2.7.1+cu126-cp311-cp311-win_amd64.whl
D:\下载\windows浏览器下载\torchaudio-2.7.1+cu126-cp311-cp311-win_amd64.whl
D:\下载\windows浏览器下载\torchvision-0.22.1+cu126-cp311-cp311-win_amd64.whl
3、安装pytorch
在虚拟环境中执行以下安装命令:
pip install D:\下载\windows浏览器下载\torch-2.7.1+cu126-cp311-cp311-win_amd64.whlpip install D:\下载\windows浏览器下载\torchaudio-2.7.1+cu126-cp311-cp311-win_amd64.whlpip install D:\下载\windows浏览器下载\torchvision-0.22.1+cu126-cp311-cp311-win_amd64.whl
4、安装transformers库
#安装transformers库
pip install transformers==4.53.0
二、选择模型
进入官网:https://huggingface.co/
这里选择了一个qwen的小参数模型进行测试,可以根据自己的需求选择下载。
但需注意:这里演示的“文本生成模型”,如果想要尝试其它类型的模型,在【三、下载模型至本地访问】的步骤中需要对导入依赖进行相应的更改。
三、下载模型至本地访问
2.1 功能说明
该代码主要用于下载“因果语言建模(文本生成)”类(Causal Language Modeling,简称 CausalLM)的模型
比如:
GPT 系列(GPT2、GPT3、GPT-NEOX、ChatGLM 等)
Chat 类模型(deepseek、Qwen、Baichuan、Yi 等)
用于 文本生成任务(如对话、补全、续写)
【什么是 CausalLM?】
它是左到右逐词预测的模型。
举例:输入“今天的天气”,模型会生成后续词“很好”。
常用于聊天机器人、自动写作等任务。
2.2 执行代码
【使用方法】
1、选好模型
使用该代码前,请先在HuggingFace上选择好自己要下载的模型
步骤:选好模型→复制其名称
2、更改模型名称
写入自己选择的模型名称即可
#将模型和分词器下载到本地,并指定保存路径 model_name = "Qwen/Qwen3-0.6B"
【Qwen/Qwen3-0.6B】就是【二、选择模型】步骤中复制的模型名称
3、更改选择存储路径
选择自己的存放路径
cache_dir = "model2/uer/Qwen/Qwen3-0.6B"
4、运行程序
模型加载和下载需要花费较长时间
5、查看文件
在项目根目录找到路径【model2/uer/Qwen/Qwen3-0.6B】,查看文件是否完整,完整即下载成功
#将模型下载到本地调用
from transformers import AutoModelForCausalLM,AutoTokenizer#将模型和分词器下载到本地,并指定保存路径
model_name = "Qwen/Qwen3-0.6B"
cache_dir = "model2/uer/Qwen/Qwen3-0.6B"#下载模型
AutoModelForCausalLM.from_pretrained(model_name,cache_dir=cache_dir)
#下载分词工具
AutoTokenizer.from_pretrained(model_name,cache_dir=cache_dir)print(f"模型分词器已下载到:{cache_dir}")
2.3 代码解析
✅1、依赖库
from transformers import AutoModelForCausalLM, AutoTokenizer
【AutoModelForCausalLM】
自动加载用于**因果语言建模(文本生成)**的模型(如 GPT、ChatGLM 等)。
【AutoTokenizer】
自动加载与模型匹配的分词器。
✅2、定义离线保存模型名和存储路径
model_name = "uer/gpt2-chinese-cluecorpussmall" cache_dir = "model/uer/gpt2-chinese-cluecorpussmall"
【model_name】Hugging Face 上的模型名称。这里选的是中文 GPT2 模型,作者是 uer。
【cache_dir】设置本地缓存路径,模型和分词器都会下载到这个文件夹,避免每次都联网下载。
✅3、下载模型
AutoModelForCausalLM.from_pretrained(model_name, cache_dir=cache_dir)
下载并缓存 模型权重和配置文件 到
cache_dir
。作用相当于:
下载
pytorch_model.bin
下载
config.json
等元信息
✅4、下载并缓存 分词器配置与词表文件
AutoTokenizer.from_pretrained(model_name, cache_dir=cache_dir)
包括:
vocab.txt
/vocab.json
tokenizer_config.json
✅5、打印提示信息
print(f"模型分词器已下载到:{cache_dir}")
打印提示信息,告诉你本地路径在哪里,方便之后 离线调用。
2.4 扩展:其它模型加载方式
🧩 如果你想做其他任务,需要对应的加载方式:
任务类型 | 加载方式 | 举例模型 |
---|---|---|
✅ 文本生成 | AutoModelForCausalLM | GPT2、ChatGLM、Qwen |
✅ 文本分类 | AutoModelForSequenceClassification | BERT、RoBERTa |
✅ 文本问答 | AutoModelForQuestionAnswering | BERT-QA、ALBERT |
✅ 序列标注 | AutoModelForTokenClassification | NER 任务 |
✅ 句子对匹配 | AutoModelForSequenceClassification | 情感分析、自然语言推理(NLI) |
✅ 编码器输出 | AutoModel 或 AutoModelWithLMHead | 取特征用 |
✅ Encoder-Decoder | AutoModelForSeq2SeqLM | BART、T5、mT5 |
✅ 举个例子:文本分类任务用法
from transformers import AutoTokenizer, AutoModelForSequenceClassificationmodel = AutoModelForSequenceClassification.from_pretrained("bert-base-chinese")
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
四 、调用模型
4.1 执行代码
你这段代码实现了一个 基于 GPU 离线运行的 Qwen3 模型中文文本生成系统,可以灵活控制生成策略(长度、创造力、候选数量等),非常适合中文对话或写作类任务。
【使用方法】
修改【model_dir】换成包含config.json的路径,如:
D:\computer_soft\Microsoft VS Code\python_project\my_app\model2\uer\Qwen\Qwen3-0.6B\models--Qwen--Qwen3-0.6B\snapshots\e6de91484c29aa9480d55605af694f39b081c455
#本地离线调用GPT2
from transformers import AutoModelForCausalLM,AutoTokenizer,pipeline#设置具体包含config.json的目录,只支持绝对路径
model_dir = r"D:\computer_soft\Microsoft VS Code\python_project\my_app\model2\uer\Qwen\Qwen3-0.6B\models--Qwen--Qwen3-0.6B\snapshots\e6de91484c29aa9480d55605af694f39b081c455"#加载模型和分词器
model = AutoModelForCausalLM.from_pretrained(model_dir)
tokenizer = AutoTokenizer.from_pretrained(model_dir)#使用加载的模型和分词器创建生成文本的pipeline
generator = pipeline("text-generation",model=model,tokenizer=tokenizer,device="cuda")#device="cuda"表示使用 GPU(默认是 "cpu")
#generator = pipeline("text-generation",model=model,tokenizer=tokenizer) #不加device="cuda" # 👈 表示使用 "cpu"运行#生成文本
# output = generator("你好,我是一款语言模型,",max_length=50,num_return_sequences=1)
output = generator("你好,我是一款语言模型,",#生成文本的输入种子文本(prompt)。模型会根据这个初始文本,生成后续的文本max_length=50,#指定生成文本的最大长度。这里的 50 表示生成的文本最多包含 50 个标记(tokens)num_return_sequences=1,#参数指定返回多少个独立生成的文本序列。值为 1 表示只生成并返回一段文本。truncation=True,#该参数决定是否截断输入文本以适应模型的最大输入长度。如果 True,超出模型最大输入长度的部分将被截断;如果 False,模型可能无法处理过长的输入,可能会报错。temperature=0.7,#该参数控制生成文本的随机性。值越低,生成的文本越保守(倾向于选择概率较高的词);值越高,生成的文本越多样(倾向于选择更多不同的词)。0.7 是一个较为常见的设置,既保留了部分随机性,又不至于太混乱。top_k=50,#该参数限制模型在每一步生成时仅从概率最高的 k 个词中选择下一个词。这里 top_k=50 表示模型在生成每个词时只考虑概率最高的前 50 个候选词,从而减少生成不太可能的词的概率。top_p=0.9,#该参数(又称为核采样)进一步限制模型生成时的词汇选择范围。它会选择一组累积概率达到 p 的词汇,模型只会从这个概率集合中采样。top_p=0.9 意味着模型会在可能性最强的 90% 的词中选择下一个词,进一步增加生成的质量。clean_up_tokenization_spaces=True#该参数控制生成的文本中是否清理分词时引入的空格。如果设置为 True,生成的文本会清除多余的空格;如果为 False,则保留原样。默认值即将改变为 False,因为它能更好地保留原始文本的格式。
)
print(output)
运行结果
Device set to use cuda
Both `max_new_tokens` (=256) and `max_length`(=50) seem to have been set. `max_new_tokens` will take precedence. Please refer to the documentation
for more information. (https://huggingface.co/docs/transformers/main/en/main_classes/text_generation)
[{'generated_text': '你好,我是一款语言模型,能根据用户输入的信息,进行多轮对话,与用户交流关于不同主题的讨论,比如科技、文化、教育等。我需要为这个
模型设计一个清晰、易用的对话界面,并且能够支持用户输入多语言。我需要确保界面具有良好的设计,包括视觉效果和交互体验。同时,我需要考虑如何将这些功能
整合到一个简洁、直观的界面中,让用户能够轻松地使用它。\n我的目标是创建一个能够帮助用户进行多语言交流的界面,同时保持界面的简洁和直观。为了让用户能
够轻松地使用这个界面,我需要确保界面设计和交互体验都是用户友好。我需要考虑如何将这些功能整合到一个简洁、直观的界面中,让用户能够轻松地使用它。\n现
在,我需要考虑如何设计一个用户友好的对话界面,包括视觉设计和交互体验。我需要确保界面具有良好的设计,包括视觉效果和交互体验,同时支持多语言和多轮对
话。\n我需要考虑如何将这些功能整合到一个简洁、直观的界面中,让用户能够轻松地使用它。我现在需要开始设计这个界面。\n首先,我需要确定界面的主要功能和
组件,然后考虑如何将这些组件'}]
4.2 代码解析
1、库名依赖
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
-
AutoModelForCausalLM
:加载因果语言模型(Causal Language Model),用于文本生成任务。 -
AutoTokenizer
:加载与模型配套的分词器(Tokenizer)。 -
pipeline
:Transformers 提供的高级封装,可以快速构建推理任务,如文本生成、情感分类等。
2、设置本地模型路径
model_dir = r"D:\computer_soft\Microsoft VS Code\python_project\my_app\model2\uer\Qwen\Qwen3-0.6B\models--Qwen--Qwen3-0.6B\snapshots\e6de91484c29aa9480d55605af694f39b081c455"
-
指定的是一个 本地模型的绝对路径。
-
路径下需要包含
config.json
,pytorch_model.bin
,tokenizer_config.json
,tokenizer.model
或vocab.txt
等必要文件。 -
这是 Hugging Face 下载下来的模型的实际缓存目录。
3、加载模型与分词器(Tokenizer)
model = AutoModelForCausalLM.from_pretrained(model_dir)
tokenizer = AutoTokenizer.from_pretrained(model_dir)
-
离线加载模型和分词器,不访问网络。
-
会自动读取
config.json
、pytorch_model.bin
等文件初始化模型。
4、构建文本生成管道(pipeline)
generator = pipeline("text-generation", model=model, tokenizer=tokenizer, device="cuda")
-
pipeline("text-generation", ...)
:创建一个专用于 文本生成 的推理管道。 -
device="cuda"
:表示使用 GPU 运行模型推理(需要你机器有 CUDA 环境和 GPU)。-
若写
"cpu"
或不写device
,则用 CPU。 -
也可以用
device=0
(GPU0)、device=-1
(CPU)。
-
若电脑有GPU建议用GPU运行
5、 调用模型进行文本生成
output = generator("你好,我是一款语言模型,",max_length=50,num_return_sequences=1,truncation=True,temperature=0.7,top_k=50,top_p=0.9,clean_up_tokenization_spaces=True
)
🔍 参数详解:
参数 | 说明 |
---|---|
prompt | 输入的种子文本,模型基于此生成后续内容 |
max_length=50 | 最大生成 token 数,不含 input 的长度 |
num_return_sequences=1 | 返回几段生成文本(n 条候选) |
truncation=True | 如果输入太长则自动截断,避免超出模型最大长度 |
temperature=0.7 | 控制“创造力”程度(越低越保守) |
top_k=50 | 每次生成时仅在概率最高的前 50 个词中采样 |
top_p=0.9 | nucleus sampling:累计概率前 90% 的词中采样 |
clean_up_tokenization_spaces=True | 清理分词过程中引入的多余空格 |
五、多轮对话示例
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline# 模型路径(修改为你的本地路径)
model_dir = r"D:\computer_soft\Microsoft VS Code\python_project\my_app\model2\uer\Qwen\Qwen3-0.6B\models--Qwen--Qwen3-0.6B\snapshots\e6de91484c29aa9480d55605af694f39b081c455"# 加载模型和分词器
model = AutoModelForCausalLM.from_pretrained(model_dir)
tokenizer = AutoTokenizer.from_pretrained(model_dir)# 创建生成器
generator = pipeline("text-generation", model=model, tokenizer=tokenizer, device="cuda")# 初始化对话历史
history = []def chat(prompt, history, max_length=256):# 构建完整对话输入full_input = ""for user, bot in history:full_input += f"用户:{user}\nAI:{bot}\n"full_input += f"用户:{prompt}\nAI:"# 模型生成response = generator(full_input,max_length=max_length,num_return_sequences=1,truncation=True,temperature=0.7,top_k=50,top_p=0.9,clean_up_tokenization_spaces=True)[0]['generated_text']# 截取新增回答部分reply = response[len(full_input):].strip().split('\n')[0].strip()return reply# 简易对话循环
while True:user_input = input("你:")if user_input.lower() in ["exit", "quit", "退出"]:breakbot_reply = chat(user_input, history)print("AI:", bot_reply)history.append((user_input, bot_reply))
运行结果
Device set to use cuda
你:你好
Both `max_new_tokens` (=256) and `max_length`(=256) seem to have been set. `max_new_tokens` will take precedence. Please refer to the documentation for more information. (https://huggingface.co/docs/transformers/main/en/main_classes/text_generation)
AI: 你好,很高兴见到你!我是一个AI助手,可以帮你解答问题。如果有什么问题,欢迎随时告诉我。
你:讲一个笑话吧
Both `max_new_tokens` (=256) and `max_length`(=256) seem to have been set. `max_new_tokens` will take precedence. Please refer to the documentation for more information. (https://huggingface.co/docs/transformers/main/en/main_classes/text_generation)
AI: 当然可以!这里有一个有趣的笑话:为什么鸟儿喜欢打游戏?因为它们需要在空中飞行!
你:不好笑
Both `max_new_tokens` (=256) and `max_length`(=256) seem to have been set. `max_new_tokens` will take precedence. Please refer to the documentation for more information. (https://huggingface.co/docs/transformers/main/en/main_classes/text_generation)
AI: 明白了,那我们来玩个游戏吧!我猜你猜不到多少个笑话,你来猜第一个笑话,然后我来猜下一个!
说明:因为这里模型参数较小,所以回答的质量上会差一些,如果想要更高质量的回答,可以根据自己电脑GPU大小适当考虑使用更高参数的模型。
模型越大,所需的 GPU 显存(VRAM)和硬件资源也就越高。这条规律适用于所有大语言模型(LLMs),无论是 GPT、Qwen、LLaMA 还是 ChatGLM。