前置背景:
需求是把CLIP模型在实验室Ubuntu服务器上配置环境,有一个老师给的账号和密码,用mobaXterm可以连接上服务器。
首先,需要在自己的文件夹里面下载Anaconda,因为我的账户里面别人已经下过了,所以,这一步不讲解过程。
文章主要讲如何在Ubuntu服务器上,且已经下载过Anaconda的情况下,创建自己的Python虚拟环境,涉及如何选择Python编译器的版本、Pytorch的版本、CUDA的版本,才能保证Python+Pytorch+CUDA+服务器显卡驱动版本适配。
一.在服务器上安装Anaconda
这个如何安装我不讲了,网上资料很多,装好了之后会有anaconda3文件夹,文件如下。
二、如何在服务器上创建自己的Python虚拟环境
1.envs文件夹
先说上面的envs文件夹作用,里面放的就是已经创建好的所有虚拟环境,因为服务器环境是大家一起用的,里面的文件夹都是别人已经创建好的环境。如果你创建了自己的虚拟环境,这个文件夹里面会更新哦。
2.创建自己的虚拟环境
下面是我的执行命令(我用的第二个指定了Python版本),CLIP是自定义的虚拟环境名。如果用第一个不指定版本,我的服务器好像会自动在Anaconda里面选最新的Python版本3.12.3,但是这个版本太新了不适配我其他的环境,下面会讲清楚,关于如何判断我要选择哪个版本的Python创建虚拟环境。
conda create --name CLIP python
conda create --name CLIP python=3.11.4
3.如何选择虚拟环境的Python版本
先说原理,Python版本+Pytorch版本+CUDA Runtime+CUDA driver版本是统一的,如果不适配后面会有问题。下面我说一下这几个的版本要如何统一确定下来。
查看服务器的显卡驱动版本
nvidia-smi
输入上面的命令,显示如下,说明我的CUDA driver版本是12.4。
因此,我的CUDA Runtime需要比CUDA driver版本的12.4低一点点,这样不容易出错。我选了12.1。如何找到该版本的安装CUDA Runtime环境的命令链接如下。
Start Locally | PyTorch 进入PyTorch网页会有这个图,点击红框。
点击红框后,会显示如下界面。然后在Conda下面,找到Linux的CUDA12.1版本的命令就行。
特别看到,里面有pytorch=2.2.2,看到这个才能确定我们的 Python版本。
# CUDA 12.1
conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=12.1 -c pytorch -c nvidia
最后,进入网站https://github.com/pytorch/vision#installation,就能看到torch对应的Python版本了。
4.正式安装步骤
上面讲了如何确定你的各种版本。总结而言,就是先看服务器的显卡CUDA驱动,我是12.4,导致我的CUDA Runtime版本就要比他小一点点,我选了12.1,再导致我的Pytorch版本是2.2.2,最后导致我的Python版本在3.8-3.11。
下面就直接写每一步的安装步骤命令和运行结果了。
(1)创建指定Python版本的虚拟环境
我选了3.11.4,其实只要是3.8-3.11都行(ps:运行下面的命令之前可以输入conda search python,查看Anaconda所有的Python环境,确保你指定的版本在Anaconda里面有,一般都有)
conda create --name CLIP python=3.11.4
(2)激活虚拟环境
conda activate CLIP
(3)在虚拟环境内,安装指定版本的CUDA runtime和Pytorch
conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=12.1 -c pytorch -c nvidia
(4)在虚拟环境内,安装三个要用的第三方库
pip install ftfy regex tqdm --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple
(5)进入CLIP-main文件夹(有 setup.py文件)进行最后一步安装
一定要进入CLIP-main文件夹哦。
python3 setup.py build install
到这里,CLIP的环境就搭建好了,下面开始测试喽。
三、测试
1.进入CLIP-main/tests文件夹
2.跑项目自带的测试文件test_consistency.py
要安装pytest之后,才能跑test_consistency.py文件
用下面的命令测试,-s不加也行,就是如果在文件里自己加一些print语句希望看看程序执行到哪看不见,最好加上。
conda install pytest
pytest -s test_consistency.py
PS:这个测试跑的很慢,因为里面把CLIP所有模型文件都要加载,2小时起步。建议可以先跑一个小的Demo,看看环境是不是好了,直接见第三步。
如果这跑这个pytest的文件,大概运行界面如下,py后面的绿色框框里会有.....输出,一个点代表一个模型运行成功了,大概输出到九个点就结束了,因为要load九个模型。
最后跑完的结果如下,还有3个waring,不过九个模型的passed就问题不大,说明成功了。
3.跑自己写的测试文件mytest.py
import torch
import clip
from PIL import Image
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/16", device=device)
#model, preprocess = clip.load("ViT-L/14", device=device)
image = preprocess(Image.open("CLIP.png")).unsqueeze(0).to(device)
text = clip.tokenize(["a diagram", "a dog", "a cat"]).to(device)
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
logits_per_image, logits_per_text = model(image, text)
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
print("Label probs:", probs)
这个py文件放的位置如下。把上面的代码复制进去就行。
然后,运行如下命令,测试文件,
python mytest.py
#conda deactivate(退出虚拟环境)
运行结果如下。