一、环境准备
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交互环境再逐行输入以下代码
pythonimport torch print(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文件,内容如下:
python
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# 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 = []
while True:
user_input = input("你: ")
if user_input.lower() in ["exit", "quit", "退出"]:
break
messages.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
python
from transformers import AutoTokenizer, AutoModel
import torch
# 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()
while True:
user_input = input("你: ")
if user_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这两个库
bash
# 临时使用清华镜像源安装 fastapi 和 uvicorn
pip install fastapi uvicorn -i https://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,需要先设置镜像
bash
set HF_ENDPOINT=https://hf-mirror.com
现在就可以启动 API 服务了:
bash
python qwen_API.py
看见以下信息就表示成功了
bash
INFO: Started server process [8476]
INFO: Waiting for application 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 文档。