CodeWithGPU简介
CodeWithGPU是一个AI镜像、模型技术社区(今后文档中简称CG),它以GitHub为基础,在GitHub托管的代码下游,提供额外的镜像环境、算法模型等,解决以往构建环境难、管理与分享模型难的问题,为算法开发者、研究者等提供开箱即用的内容体验。 >CodeWithGPU和AutoDL同属于视拓云研发和运营的产品,两者账户通用,可以互相登录使用。 ### 镜像 CG上的镜像指能运行Github上某一具体项目代码所需的docker image环境。主要目的为方便其他用户免去构建环境安装依赖的过程,而直接在此基础之上训练模型。镜像来自用户在AutoDL上保存的docker image。(AutoDL是一个GPU算力租用平台,它和CG共用账户,即一个帐号可在两个平台中登录)
模型
CG上的模型指用户使用算法在某数据集上训练出来的模型文件。
使用的话首先需要安装:pip install codewithgpu
可以由以下两种方式下载模型: 1. cli
cg down GuoFeng3/GuoFeng3.3.safetensors
2. 代码中集成
import codewithgpu as cg
cg.model.download("模型文件的KEY", target_directory="下载目标路径,可选"))
安装
cuda检查
检查电脑的nvidia驱动以及cuda toolkit。
nvidia-smi
nvcc -V
如果显示有:Failed to initialize NVML: Driver/library version mismatch。
则说明驱动和cuda
toolkit版本不匹配,需要重新安装驱动或者cuda toolkit。
或者你的cuda版本过低,建议也升级一下,不然CG很多新的镜像都无法使用。
如果你的cuda版本ok且驱动都正常的话,那么跳过这里直接看下面的安装cg-client。
卸载旧版本nvida驱动和cuda toolkit
卸载nvidia驱动:
sudo nvidia-uninstall
卸载cuda toolkit:找到 CUDA 工具包的安装目录(例如 /usr/local/cuda-10.1/),然后执行:
如果你忘记了 CUDA 工具包的安装目录,可以使用以下命令找到:cd /usr/local/cuda-10.1/bin/ sudo ./cuda-uninstaller
或者通过之前安装cuda设置的环境变量查看:where nvcc
如果没有找到cuda-uninstaller,可以手动删除:echo $PATH | tr ':' '\n' | grep cuda echo $LD_LIBRARY_PATH | tr ':' '\n' | grep cuda
sudo rm -rf /usr/local/cuda-11.8/ # 删除目录 # 清理其他残留文件: sudo apt-get remove --purge '^nvidia-.*' sudo apt-get remove cuda* sudo apt-get autoremove # 查看剩余残留 sudo dpkg -l |grep cuda # 继续卸载哈哈 sudo dpkg -P 残留文件全称 # 环境变量删除:编辑~/.bashrc 或者 /etc/profile文件中是否有 CUDA 相关路径, 删除以下内容 export PATH=/usr/local/cuda-11.8/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH # 保存 source ~/.bashrc
完成卸载后,删除 CUDA 工具包的目录:
### 安装新版本nvidia驱动sudo rm -rf /usr/local/cuda-10.1/
前往 NVIDIA 官方网站,根据显卡型号(例如 2080Ti)下载最新的驱动程序。
将下载的驱动程序(例如 NVIDIA-Linux-x86_64-550.54.14.run)上传到服务器的某个目录,然后执行:
sudo sh NVIDIA-Linux-x86_64-550.54.14.run
安装完成后,重启服务器:
sudo reboot
重启后,检查驱动是否安装成功:
nvidia-smi
安装新版本cuda toolkit
注意安装的cuda toolkit版本要和nvidia驱动版本匹配:
- nvidia-smi属于driver API、nvcc属于runtime API。
- 用于支持driver API的必要文件(如libcuda.so)是由GPU driver installer安装的。
- 用于支持runtime API的必要文件(如libcudart.so以及nvcc)是由CUDA Toolkit installer安装的。
- 如果只安装driver API,不安装runtime API(cuda toolkit),也能正常使用pytorch,但涉及到一些需要编译安装的更底层的工具,比如apex、deepspeed,就会报错,这时还需要床runtime API。
-
前往 NVIDIA 开发者网站,根据操作系统和需求下载与新驱动兼容的
CUDA 工具包(例如 CUDA 12.1.1)。 - 将下载的 CUDA 安装包(例如
cuda_12.1.1_530.30.02_linux.run)上传到服务器的某个目录,然后执行:
sudo sh cuda_12.1.1_530.30.02_linux.run
注意:由于已经有CUDA
Driver12.4了,因此在安装过程中不需要勾选CUDA Driver。 -
安装完成后,设置环境变量:
(如果之前安装过旧版本记得删除旧版本的环境变量) echo 'export PATH=/usr/local/cuda-12.1/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
-
检查CUDA是否安装成功: nvcc -V
cg-client
# 下载客户端并添加可执行权限
wget -O cg-client https://codewithgpu.ks3-cn-beijing.ksyuncs.com/cg-client
chmod +x cg-client
# 启动客户端,需要使用到sudo权限否则有docker使用上的异常
sudo ./cg-client
web上使用
启动cg-client
后会输出类似如下包含访问地址的日志:
**************
cg-client is running on http://localhost:2022/container?token=E5PR11vT9MMbrpwFeIdLcltRNnUmaY
**************
在浏览器中打开该地址后,客户端会自动检测是否有Docker环境,点击安装nvidia-docker按钮自动安装相关环境
docker的权限配置
在使用docker时,如果不想每次都使用sudo,可以将当前用户加入docker组:
sudo groupadd docker # 添加docker组
sudo gpasswd -a ${USER} docker # 将当前用户加入docker组
sudo systemctl restart docker # 重启docker服务
sudo chmod a+rw /var/run/docker.sock # 修改docker.sock权限
如果使用ssh连接的服务器使用则需要设置端口转发
ssh -CNg -L 2022:localhost:2022 user@host -p port
参数说明: -C:
启用压缩。这对于减少传输数据量有帮助,特别是在带宽较低的情况下。
-N: 不执行远程命令,只建立隧道。适合仅用于端口转发的场景。
-g: 允许其他主机通过本机(运行此命令的机器)的 7890 端口访问隧道。 如果不需要其他机器访问,可以省略这个参数。
-L: 本地端口转发。格式为 -L [本地端口]:[目标地址]:[目标端口]
CG开始使用时需要安装docker/nvidia-docker环境,web界面会自动检测是否有Docker环境,点击安装nvidia-docker按钮自动安装相关环境,但是我使用时发现我原本安装的docker环境在使用CG提供的脚本安装后就失效了,所以建议还是卸载原有的docker环境后再使用CG提供的脚本安装
这样就成功啦
使用
在web界面可以实现容器的创建、启动、停止、删除等操作,也可以上传文件到容器中,也可以在容器中打开终端,执行命令,查看日志等操作。
docker的存储
在容器内我们会发现系统盘大小为本地根目录的大小,这是因为Docker
默认安装的情况下,会使用/var/lib/docker/
目录作为存储目录,用以存放拉取的镜像和创建的容器等。
而autodl-tmp未挂载,虽然CG提供了网盘的支持,但是如果我们想适用宿主机中的磁盘分区的话,还得会一些docker的存储知识(见博客-docker的存储)
在了解了docker的存储后,我们可以通过docker run
命令的-v
参数来挂载宿主机的磁盘分区到容器中,这样就可以在容器中使用宿主机的磁盘分区了。在web界面创建容器时也提供了挂载的选项,可以直接在web界面中挂载。
镜像与容器的基本用法
具体见博客-docker的常见命令,这里简单通过本地终端创建并运行一个容器来说明: - 拉取镜像
docker pull registry.cn-beijing.aliyuncs.com/codewithgpu2/hvision-nku-storydiffusion:n3iFx8w7UJ
- 查看镜像 docker images
- 创建并运行容器
sudo docker run -d --name quizzical_wilson --gpus all -v data80:/root/autodl-tmp registry.cn-beijing.aliyuncs.com/codewithgpu2/hvision-nku-storydiffusion:n3iFx8w7UJ sleep infinity
# 这里我挂载了一个卷data80到容器的/root/autodl-tmp目录
sudo docker exec -it quizzical_wilson /bin/bash
到这里就可以在容器中进行操作了,可以使用exit
退出容器。 -
停止容器 docker stop quizzical_wilson
参考: > CG官方文档:https://www.codewithgpu.com/docs/
docker engine文档:https://docs.docker.com/engine/