主流开源LLM(Qwen、ChatGLM等)的本地化部署
一、环境准备
1. 先下载conda(或者Anaconda、Miniconda)
2. 在下载目录进入命令提示符(地址栏输入CMD)
3. 运行自带的激活脚本.\Scripts\activate
E:\anaconda>就会变成(base) E:\anaconda>
现在输入conda --version可以验证版本
(base) E:\anaconda>conda --version conda 24.9.24. 创建LLM 专用环境
# 1. 创建名为 llm_env 的新环境,指定 Python 3.10 conda create -n llm_env python=3.10 -y # 2. 激活新创建的环境。第二次进入时,运行自带的激活脚本后,直接运行这条命令进入环境。 conda activate llm_env激活后,命令提示符会从(base)变成(llm_env),表示你现在位于独立的环境中。
5. 安装依赖库
1 安装PyTorch
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118验证 PyTorch 和 CUDA 是否可用
先输入python,进入python交互环境
再逐行输入以下代码importtorchprint(torch.__version__)print(torch.cuda.is_available())print(torch.cuda.get_device_name(0))如果第一行就报错
(llm_env) E:\anaconda>python Python 3.12.7 | packaged by Anaconda, Inc. | (main, Oct 4 2024, 13:17:27) [MSC v.1929 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information.说明你的 python 指向的是 Python 3.12.7,但 PyTorch 我们刚刚是装在 Python 3.10 的环境里的
这时候先输入exit()退出
再用完整路径强制调用E:\anaconda\envs\llm_env\python.exe2 安装部署 LLM 必需的库
pip install transformers accelerate bitsandbytes scipy sentencepiece
安装完成后,就可以开始下载并运行模型了。
二、模型获取
- 1.Qwen.
在方便的地方(比如桌面),创建一个名为 test_qwen.py 的Python文件,内容如下:
fromtransformersimportAutoTokenizer,AutoModelForCausalLMimporttorch# 1. 指定模型名称model_name="Qwen/Qwen2.5-1.5B-Instruct"print("正在下载并加载模型,首次运行需要下载约3GB文件...")# 2. 加载分词器tokenizer=AutoTokenizer.from_pretrained(model_name,trust_remote_code=True)# 3. 加载模型(不量化,FP16精度,显存占用约2.5GB)model=AutoModelForCausalLM.from_pretrained(model_name,torch_dtype=torch.float16,device_map="auto",trust_remote_code=True)print("模型加载完成!开始对话...\n")# 4. 对话循环messages=[]whileTrue:user_input=input("你: ")ifuser_input.lower()in["exit","quit","退出"]:breakmessages.append({"role":"user","content":user_input})text=tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True)inputs=tokenizer(text,return_tensors="pt").to(model.device)outputs=model.generate(**inputs,max_new_tokens=512,temperature=0.7,do_sample=True)response=tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:],skip_special_tokens=True)print(f"助手:{response}\n")messages.append({"role":"assistant","content":response})在命令行(确保 (llm_env) 环境是激活的)中,cd 到脚本所在目录,然后在命令行中设置环境变量,让下载走国内镜像set HF_ENDPOINT=https://hf-mirror.com
接着运行文件python test_qwen.py
会输出
正在下载并加载模型,首次运行需要下载约3GB文件... ... 模型加载完成!开始对话...现就就可以对话了
你: 你好,你是谁 助手: 我是Qwen,由阿里云开发的大规模语言模型。我是一个人工智能助手,可以帮助回答问题、提供信息和进行对话。有什么我可以帮助你的吗?- 2.ChatGLM
fromtransformersimportAutoTokenizer,AutoModelimporttorch# ChatGLM3-6B 模型名称model_name="THUDM/chatglm3-6b"print("正在下载并加载 ChatGLM3-6B (4-bit 量化)...")# 加载分词器tokenizer=AutoTokenizer.from_pretrained(model_name,trust_remote_code=True)# 4-bit 量化加载模型model=AutoModel.from_pretrained(model_name,load_in_4bit=True,# 启用 4-bit 量化torch_dtype=torch.float16,device_map="auto",trust_remote_code=True)print("模型加载完成!开始对话...\n")# ChatGLM 的对话方式与 Qwen 不同,使用 model.chat()whileTrue:user_input=input("你: ")ifuser_input.lower()in["exit","quit","退出"]:break# ChatGLM 内置了对话历史管理response,history=model.chat(tokenizer,user_input,history=[])print(f"助手:{response}\n")三、部署API
在虚拟环境llm_env中安装FastAPI和UvicornFastAPI和 Uvicorn这两个库
# 临时使用清华镜像源安装 fastapi 和 uvicornpipinstallfastapi uvicorn-ihttps://pypi.tuna.tsinghua.edu.cn/simple/然后新建文件qwen_API.py
from fastapi import FastAPI, HTTPException from pydantic import BaseModel from transformers import AutoTokenizer, AutoModelForCausalLM import torch app = FastAPI() # 加载模型(全局加载一次) model_name = "Qwen/Qwen2.5-1.5B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype=torch.float16, device_map="auto", trust_remote_code=True ) class ChatRequest(BaseModel): prompt: str max_new_tokens: int = 512 @app.post("/generate") def generate(request: ChatRequest): inputs = tokenizer(request.prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_new_tokens=request.max_new_tokens) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return {"response": response} if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)如果你的网络无法稳定访问 Hugging Face,需要先设置镜像
setHF_ENDPOINT=https://hf-mirror.com现在就可以启动 API 服务了:
python qwen_API.py看见以下信息就表示成功了
INFO: Started server process[8476]INFO: Waitingforapplication startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000(Press CTRL+C to quit)接下来就可以访问http://localhost:8000/docs查看 Swagger 文档。