Pytorch

Pytorch In docker

作为一个全新的多人合作的项目,也当作是一个学习使用DLGPT环境配置的过程,甚至是从非常开始的地步,搭建一个可以运行的环境

首先在docker下拉取ubuntu20.04的镜像,新建容器

$ docker pull ubuntu:20.04
$ docker run -it --name ubuntu_pytorch ubuntu:20.04

之后就可以使用命令来打开并进入容器:

$ docker start ubuntu-pytorch
$ docker exec -it ubuntu-pytorch /bin/bash

安装好必要的工具:

$ apt-get update
$ apt-get install gcc
$ apt-get install wget
$ apt-get install make
$ apt-get install vim
$ apt-get install zlib*
$ apt-get install libffi-dev
$ apt-get install libssl-dev
$ apt-get install python3
$ apt install python3-pip

安装好以后,因为是以nano GPT的使用为导向,所以根据其文档,来安装对应版本的库

首先要对pip3换源(原本的源太折磨了)

$ pip3 install --upgrade pip
$ pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

接着安装其它需要的库(在此之前,需要创建一个普通用户,否则无法正常使用pip安装)

$ pip3 install tqdm==2.2.3
$ pip3 install wandb==0.6.31
$ pip3 install tiktoken==0.3.3
$ pip3 install datasets==2.11.0
$ pip3 install transformers==2.9.0
$ pip3 install numpy==1.24.2

后面就是,比较麻烦的部分:

因为显卡资源在主机上,所以无法在docker中直接被调用,如果想要使用,就不像在宿主机中,直接安装驱动那么简单,需要在主机上,安装适用于docker的驱动

本来到了这一步,已经安装了只适用于CPU版本的pytorch,打算凑合用了,或者直接使用已经封装好的,还有CUDA的镜像,后来发现了一个,在WSL中,透传使用显卡

于是在docker中查看了一下ubuntu的版本,发现也是基于WSL的:

$ uname -r 
5.10.102.1-microsoft-standard-WSL2

决定尝试安装对应的驱动,在docker中,透传使用GPU

先在官网中,找到适用于WSL的驱动程序,发现Nvidia for WSL2已经下架了,反而在最新的驱动程序中,描述其适用于WSL,所以在主机上安装好对应的驱动(操作较为简单,并且在不同主机,版本不同,这里就不加赘述)

WSL中,官方文档的描述是,下载安装新的驱动,会覆盖掉WSL中的CUDA库,所以需要另外安装官方提供的CUDA工具包:

$ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb
$ sudo dpkg -i cuda-keyring_1.0-1_all.deb
$ sudo apt-get update
$ sudo apt-get -y install cuda

使用docker保存好镜像后,重新使用其GPU功能(docker nvidia的替代),创建新的容器:

$ docker run -it --gpus all d1mhs1mm32/nanogpt:wsl -name env_test 
$ docker exec -it env_test /bin/bash
$ nvidia-smi

再安装GPU版本的pytorch:

$ sudo pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

最后检查CUDA是否可以被成功调用:

# test.py
import torch

print(torch.__version__)
print(torch.cuda.is_available()) 
print(torch.cuda.device_count()) 
print(torch.version.cuda)
$ python test.py

成功安装pytorch,并且可以正常调用Nvidia显卡:Get force 2060T

Demo

本来都已经注册好microsoft的内测机会,下载好未发布的win11了,最后跑步时候仔细想了一下,总觉得没道理一定要win10,回来重新加载了一下,就可以运行了