写在前面
前阵子DeepSeek开源了r1的一套模型,想偷个懒,抄个作业,结果一搜,全都是抱着Ollama跑到黑的,就hin头大,思来想去还是自己上吧。
1 下载
以前huggingface没被停的时候用着还挺舒服,现在想下载模型原文件,就只能去镜像站了,比较慢,这个就不提供网盘了,能查到这篇文章的也不会不知道怎么下文件,这里提供一下镜像站的下载地址,大家根据自己的需求来。 DeepSeek-R1模型下载
大家可以根据自己的设备需要来下载,我的建议是向下兼容:如果你的设备能跑7B,把1.5B也一并下了吧,反正固态也不贵,后面还能用到。在这里我只提供显存与参数量的大概参考:
显存 | 模型大小 |
---|---|
4GB+ | 1.5B |
8GB+ | 8B |
16GB+ | 14B |
24GB+ | 32B |
$$ | 70B |
$$$$$$$$ | 671B |
2 环境
环境配置困难的环节其实是cuda和cudnn的配置,这里我只提供windows的配置,linux别问,我不会。
2.1 cuda安装
下载位置:
CUDA 专区 | NVIDIA Developer 点击下载后选择自己的配置(根据自己的设备配置来)。
下载后进行安装,推荐在C盘预留出足够空间,推荐使用默认位置安装。
在进行选项安装的时候,如果有vs编译需求的可以在此处勾选,无相关需求时取消此处勾选后继续默认安装即可。
完成后点击开始按钮,输入cmd打开编辑框 输入: nvcc --version
返回类似如下输出即安装完成。
2.2 cudnn安装
下载地址:
CUDA 深度神经网络库 (cuDNN) | NVIDIA 开发者](developer.nvidia.com/cuda-toolki...)
点击下载后会,需要进行登录和问卷调查,正常填写即可。 完成问卷后,进入下载页面,选择自己设备对应的cudnn版本,点击文件进行下载。
将文件解压。
来到cuda的安装路径下(以个人安装路径为准)。
将cudnn解压的文件夹打开,复制其中三个文件夹,到cuda安装路径下。
完成后,点击开始菜单,搜索"高级系统设置",点击查看高级系统设置,并点击"环境变量",并在系统变量中找到"Path",选择编辑。
在系统变量中添加如下对象,路径参考如下:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\libnvvp 好了。
2.3 pytorch下载
线上直接安装torch的方式我一直没成功过,所以我一直都离线安装,就是下载了文件,然后切换环境通过pip命令进行安装:pip install xxxxxxx
,这里提供两个地址,国内支持GPU版本torch的站点不多:
官方离线站点: Links for torch
阿里云离线站点: index of pytorch-wheels
部署
写个脚本,我命名成QA.py【划重点,这个脚本在后面被引用了】,自己开发的时候想叫什么都行。
python
# -*- coding: utf-8 -*-
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# 生成文本
def generate_text(prompt, max_length=300):
inputs = tokenizer(prompt, return_tensors="pt").to(device)
outputs = model.generate(**inputs, max_length=max_length)
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
return generated_text
# 加载模型和分词器
qa_model_path = "./model/base_model/1.5b"
tokenizer = AutoTokenizer.from_pretrained(qa_model_path)
model = AutoModelForCausalLM.from_pretrained(qa_model_path, torch_dtype=torch.float16, device_map="auto")
# 将模型移动到GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
if __name__ == "__main__":
# 示例输入
prompt = """每天喝多少水最合适?[100字内简短回答]"""
generated_text = generate_text(prompt)
print("Generated Text:", generated_text)
如果想要回溯历史对话,记得使用历史对话结构,这个可以参考chatglm、baichuan等的入参方式,输入大致上是这个样子:
json
{
"xxx": "......",
"text": [
{"question": "你好!", "answer": "您好,请问有什么可以帮到您?"},
{"question": "没事,退下吧。", "answer": "好的,期待随时为您服务。"}
]
}
调用
写个api喽,连续请求喽。
python
# -*- coding: utf-8 -*-
from fastapi import FastAPI
from pydantic import BaseModel
import uvicorn
import LoRA
import QA
app = FastAPI()
class QA_Data(BaseModel):
prompt: str
@app.post("/qa")
async def generate(input_data: QA_Data):
generated_text = QA.generate_text(input_data.prompt)
return {"generated_text": generated_text}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
过两天更DeepSeek+Lora。