当前位置: 首页 > news >正文

主流开源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.2
4. 创建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.exe

  • 2 安装部署 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中安装FastAPIUvicornFastAPI和 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 文档。

http://www.jsqmd.com/news/1098949/

相关文章:

  • 验厂时,食品工作服需要注意什么?
  • GoalFlow:四、轨迹评分筛选模块(Trajectory Scorer, M3)
  • ps怎么调整图片大小?ps调整图片大小快捷键
  • 虚拟摇杆vJoy:Windows游戏控制器模拟的技术深度解析
  • 查新报告分为哪几种?科技查新、查收查引与专利查新区别
  • 基于 VC++ 与机器人 SDK 的工业多轴示教器软件设计与实现
  • 驾驶行为识别 打电话识别数据集 驾驶注意力监控 驾驶分心识别数据集 危险驾驶行为检测 抽烟打电话 睡觉 吃东西识别图像数据集第10149期
  • Metasploit渗透测试实战:从漏洞利用到后渗透操作详解
  • 车的使用年限,从来不是出厂定的!
  • OpenClaw排坑实录:启动失败、技能失效、模型报错,30个高频问题一次讲透
  • 解决方案|腾讯安全天御金融反电诈产品解决方案
  • 【LeetCode Hot100】189.轮转数组-三种解法以及效果评估
  • 搞定99%安装问题!OpenClaw 完整部署与故障修复
  • G-Helper终极指南:重新定义华硕笔记本硬件控制的轻量级革命
  • 模块 包 循环导入 系统
  • 3PEAK思瑞浦 TPA133A2-VS1R-S MSOP8 电流信号检测放大器
  • AI4C编译调优的终极技巧:提升程序性能30%的秘密
  • NCM音乐格式转换终极指南:5分钟解锁你的音乐收藏
  • Mineradio开源音乐播放器下载安装介绍(附下载链接)
  • 为什么好人没好报?你可能误解了“诚信”
  • 【会议征稿通知 | 西藏大学主办 | JPCS出版 | EI 、Scopus稳定检索】2026年水电系统与能源工程学术会议 (HSEE 2026)
  • 智慧矿场施工状态监测 推土机识别 装载机数据集 挖掘机等工程机械数据集第10096期
  • 实测有效|OpenClaw 闪退卡顿、网关异常根治教程
  • lac_agent自愈链路上篇——crontab守护的那些坑与健康检查实战
  • 计算机毕业设计之基于实训室管理平台的设计与实现
  • 逻辑回归(Logistic Regression)培训课件
  • .NET 8加持:C#上位机调用国产PLC运动控制指令实战
  • 医疗NLP落地实录:从病历结构化到药物发现,三大场景技术选型与合规避坑指南
  • YOLOv8一站式实战:图像分类、目标检测与实例分割全解析
  • 前端入门必学:用CSS实现三角形的常用三种方式