在Windows上运行Deepseek-R1(使用Transformers)
本文有关DeepSeek-R1在Windows系统上的运行。
注意事项
在Windows上使用transformers运行Deepseek是比较复杂的,如果你希望更简便的安装方法,你可以试试Ollama,此外,Linux或macOS上的安装可能更简单(也不一定)。
[!WARNING]
本文需要你有性能足够的英伟达显卡和其他硬件,有足够大的存储空间,本文在编写时并未考虑AMD显卡。
本文作者不对读者按文章内容操作导致的任何结果负责,你应该知道你在做什么。
大语言模型更新速度很快,本文具有很强的时效性,因此本文所有内容仅供参考,不能作为任何实践依据使用。
需要注意的是vllm可能不适用于Windows,因此本文使用transformers来进行模型的运行,同时,由于transformers并不支持fp8量化,因此我们需要将模型转为bf16,这几个因素导致安装的过程可能非常复杂,如果你的计算机水平不高,请使用WSL等技术或是安装Linux操作系统,在Linux环境下安装,或是采取其他更简便的方法。
为什么不用Ollama
本文希望以更底层的方式来运行Deepseek,而Ollama相对来说是一个已经比较完备的环境。
对于想直接体验Deepseek本地运行的读者,其实Ollama更简单。
环境搭建
本文使用Python 3.12.8,在安装时务必选择将Python 3.12.8为所有用户安装,并添加到PATH中,安装路径为C://Python312
。随后你应该自行安装pip
。
[!CAUTION]
如果不安装在
C://Python312
可能会遇到一些其他问题,但如果你发现你执行uv pip install
安装软件时被告知不存在Python.exe文件,那么你需要将Python安装到它所说的文件夹。
本文使用uv来管理环境,在Windows下只需执行即可安装uv:
1 | powershell -c "irm https://astral.sh/uv/install.ps1 | iex" |
随后新建文件夹,为了方便,这里我们规定为deepseek
,下文都将使用同样的路径。
转入文件夹,新建一个环境,指定Python 3.12.8,并激活这个环境:
1 | cd deepseek |
使用这个命令来查看你的cuda版本号,如果你没安装,需要先去安装一个cuda:
1 | nvidia-smi |
记下你的cuda版本号以供后续使用
我们还需要安装pytorch,这里需要额外注意,我们需要安装支持cuda的版本(这里作者的cuda版本号是12.6,你需要根据你的版本号来修改软件源),不然后面会有问题:
1 | uv pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu126 |
[!CAUTION]
与本文使用的cuda版本不同可能会导致其他地方出现作者没有遇到或没有考虑到的错误,你需要自己解决这些错误,并确保你输入的指令和编写的代码是符合你使用的cuda版本的。
最后,我们需要下载Deepseek-R1(务必使用Git LFS!!!并确保你的存储空间够大!!!):
1 | git lfs install |
[!CAUTION]
DeepSeek-R1的仓库中有许多大文件,需要使用Git LFS才能用git下载下来他们。
到这里环境的配置已经基本完成了。
将fp8转为bf16
查阅发现,transformers不支持fp8
量化,为了让Deepseek运行,有两种可能的思路,一种是关闭量化,另一种是将其转为其他的量化方式,还可能使用其他的程序来运行Deepseek,本文采用第二种来解决。
通过阅读Deepseek-V3的Readme
可以得知,Deepseek的开发团队提供了转换的程序,但Deepseek-R1的存储库中并没有相关文件,你需要将Deepseek-V3存储库中的inference
文件夹复制到Deepseek-R1
文件夹中。
我的建议是直接下载Deepseek-V3的zip文件,然后仅将inference
文件夹复制到DeepSeek-R1
中。
然后,你可以尝试运行:
1 | cd inference |
你在安装好绝大多数的依赖后,可能会遇到triton
这个库并没有对应的版本可供安装,这是因为官方版本中并没有为Windows进行编译,但没关系,我们可以使用这个叫triton-windows的第三方编译的库来安装,你也可以选择自己编译。
[!WARNING]
第三方编译的库未必安全,我还是建议你在开始前检查代码并考虑到一切可能的由不兼容性导致的结果。
使用triron-windows
直接进入它的github存储库,到releases中下载最新发布的适用于你的Python版本和CPU架构的编译版本(目前似乎只有amd64架构的预编译),比如本文使用的是Python 3.12.8,那么就下载triton-x.x.x-cp312-cp312-win_amd64.whl
(triton版本号已用x.x.x代替)
随后回到你的命令行界面,确保你在deepseek环境下,将triton-x.x.x-cp312-cp312-win_amd64.whl
移入deepseek文件夹,确保你在deepseek文件夹里,执行:
1 | uv pip install "triton-x.x.x-cp312-cp312-win_amd64.whl" |
你应该看到triton被成功安装,并且你再次执行转换指令时应该不再遇到任何库缺失的问题。
自行编译
[!CAUTION]
作者本人并未编译成功,步骤仅供参考。
参考triton-lang/tritonReadme中内容自行操作。
[!CAUTION]
由于DeepSeek-R1模型太大且要求的配置太高,本文接下来的内容作者并未真正执行,仅仅是一种可能的参考,务必谨慎,并且仔细检查。
开始转换
安装好triton后(无论你用的什么方法)
再次执行:
1 | cd inference |
记得将/path/to/fp8_weights换为DeepSeek-R1的文件夹,/path/to/bf16_weights换为你想存储转换后的模型的文件夹,建议你使用绝对路径防止可能出现的错误,仍然要确保你的存储空间足够大。
当转换完成后,我们需要编写一段代码来执行:
1 | from transformers import AutoModelForCausalLM, AutoTokenizer |
这里设置了模型的最大输出长度限制(为100),当然你也可以自行调整max_length=100
。
自此,你应该成功的在Windows上运行了DeepSeek-R1。
在Windows上运行Deepseek-R1(使用Transformers)