【工具教程】uv包管理:torch安装与docker部署
【工具教程】uv包管理:torch安装与docker部署
前两天用conda创建新环境时,发现torch的安装会有问题。使用conda install安装的torch,会在import torch的时候报错:
1 | |
这个问题很棘手,反正最终无论如何制定渠道,只要使用conda install就会出问题,太恶心了。前一阵子就发现Pytorch官方的推荐安装途径中,conda被删除了。当时还没怎么在意,现在感觉装起来是真的恶心。我如果用pip安装的话那还啥conda,conda吹嘘的优秀科学计算管理能力用不上,那还不如不用conda,转去使用很多人的推荐的uv。
1. uv 的安装
最简单的方式就是直接在你的全局python下使用pip安装:
1 | |
通过这种方式安装的uv会在全局创建一个环境变量。
还有其他的安装方式,我没试过,可以查看这个链接里的教程:安装 | uv 中文文档
2. uv创建虚拟环境
在你的项目的工作目录下使用:
1 | |
这里的3.12是指定的python版本,可以根据项目的需求进行更改。使用上述命令后,会在工作目录下自动创建一个名为.venv的虚拟环境。并且终端会输出一个激活的地址:Activate with: .venv\Scripts\activate,不激活也可以安装管理packages,也可以运行脚本。
在当前目录下使用:
1 | |
会在当前目录下生成初始化该项目的相关文件,包含:python-version(指明python版本,可以不理他)、project.toml(项目相关的配置文件)、README.md(项目介绍文件,使用markdown语法)、main.py(可以不理他)。这里面最重要的是project.toml,在打包项目,管理依赖的时候非常有用。
3. 安装packages
不管你有没有激活虚拟环境,直接在当前的工作目录内使用uv add指令就可以自动在当前的这个虚拟环境内安装对应的包,并且会自动地维护project.toml。例如,你如果需要在你的虚拟环境内添加flask库,就输入:
1 | |
就可以自动地在当前的虚拟环境下安装flask,并且会自动地在project.toml的dependencies里面添加flask以及对应的版本号。
在多人协作场景下,想要使用他人的project.toml文件来更新自己的虚拟环境,就只需要使用:
1 | |
uv就会自动读取project.toml中的dependencies内容,来更新你的虚拟环境。
安装完环境,如果你没激活虚拟环境,但仍然想运行代码,例如运行test.py,可以使用:
1 | |
4. 安装pytorch
直接使用uv add torch可能会自动安装cpu版本的pytorch。准确地安装cuda版本的pytorch要编辑project.toml文件。
现在pytorch的版本发页中找到对应版本的torch与cuda的pip安装指令。PyTorch历史发行版本
例如我想安装CUDA 12.4、torch 2.5.1的pytorch,对应的pip安装指令是pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 –index-url https://download.pytorch.org/whl/cu124
我就会在我的project.toml里加入以下内容:
1 | |
先在dependencies里面加上torch、torchvison以及对应的版本号,torchaudio我用不上就没加上去。然后后面的[tool.uv.sources]和[[tool.uv.index]]你就照抄就行,如果要安装torchvision的话你就在[tool.uv.sources]照着多补一行。如果要安装cuda 11.8的,你就把里面的所有124改成118就行。
改写玩project.toml后,使用uv sync就会自动安装torch。
由于安装torch的时候直连pytorch官网,没有代理加速的话下载比较慢,所以在使用uv sync之前可能需要手动设置一下代理地址。以clash为例,clash使用的默认端口是7890,所以在安装的时候使用以下命令:
1 | |
设置一个临时代理,然后下载的时候走临时代理就行。
5. Docker部署
这里提供一个我自己使用过可行的Dockerfile,用于build一个深度学习相关项目的镜像,要用到pytorch,cuda。
1 | |
使用时确保uv.lock文件没有被ignore,按照相应的规范,.venv文件要被igore。模型权重相关的文件也应该被ignore,在运行的时候通过挂载被容器访问。