本文使用GCP的机器,GPU选择T4,费用大概$0.4/h按秒计费,比国内GPU云便宜很多。如果你用的国内机器需要对conda和pip换源,不然会很慢。
配置信息如图:
由于GCP的CPU、内存、GPU都可以在关机状态下随意修改,所以这里只选择满足初装条件的配置,后续可以根据不同任务自行配置相关资源。
我这里系统映像选择的是Ubuntu18.04 LTS(注意不是带Minimal的!),不同版本的系统相关软件安装会有很大区别,所以一定要注意系统版本。硬盘尽量大一点。
创建成功后会给一个临时外部IP,这里我没有把临时IP转成静态。因为,GPU服务器费用很高,我们平时不用的时候要把服务器停掉,而静态IP在服务器停止状态会收占用费。GCP的动态IP除非长时间不用(大概一个月?),否则基本不会变。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo dpkg -i cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
sudo apt-get update
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update
不限于T4,其他Nvidia显卡应该也能通过这条命令安装驱动
sudo apt-get install --no-install-recommends nvidia-driver-430
使用命令nvidia-smi测试GPU驱动
sudo reboot
nvidia-smi
驱动正常显示如下:
这里右上角的CUDA Version: 10.2指的是该版显卡驱动最高支持的CUDA版本,要确保这里的版本号不低于你需要的CUDA版本,否则你需要升级显卡驱动。
wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
chmod +x Anaconda3-2020.02-Linux-x86_64.sh #给安装权限
./Anaconda3-2020.02-Linux-x86_64.sh #执行安装脚本
一路回车输入yes同意协议,然后确认安装目录。还会问你是否初始化conda,我输的是yes
安装完直接输入conda,会提示conda: command not found,需要配置一下
~/.bashrc
vim ~/.bashrc
在最后一行加上
export PATH=$PATH:/home/×××/anaconda3/bin
×××替换成你的登录用户名,export PATH=$PATH:【你的安装目录】
保存退出,在终端执行
source ~/.bashrc
我要安装的是TensorFlow2.2,pytorch1.5以及TensorFlow1.13.1。其中TensorFlow2.2和pytorch1.5需要CUDA10.1,而TensorFlow1.13.1需要CUDA10.0,所以我创建2个虚拟环境:
conda create -n tf_torch python=3.7
conda create -n tf13 python=3.6
Python版本可以自行根据需要选择。
我们进入创建的第一个虚拟环境
conda activate tf_torch
用conda安装TensorFlow-gpu,注意只有后面加上-gpu才能让conda自动安装CUDA,cudnn等相关依赖。
conda install tensorflow-gpu==2.2
可以看到下载的依赖包里有CUDA10.1和CUDNN7.6.5。这种安装方式是最方便的,再也不用为CUDA版本苦恼了~
$ python
Python 3.7.7 (default, May 7 2020, 21:25:33)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'2.2.0'
>>> tf.test.is_gpu_available()
WARNING:tensorflow:From <stdin>:1: is_gpu_available (from tensorflow.python.framework.test_util) is deprecated and will be removed in a future version.
Instructions for updating:
Use `tf.config.list_physical_devices('GPU')` instead.
.
.
.
tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Tesla T4, Compute Capability 7.5
True
可以看到TensorFlow2.2的GPU是可用的
如果你使用的国内源,可能需要删掉命令最后的-c pytorch
conda install pytorch==1.5.1 torchvision cudatoolkit=10.1 -c pytorch
因为TensorFlow2.2和pytorch1.5可以共用CUDA10.1和CUDNN7.6.5,所以不用下载相应包,如果是全新环境,conda会自动帮你装上GPU依赖。
$ python
Python 3.7.7 (default, May 7 2020, 21:25:33)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.5.1'
>>> torch.cuda.is_available()
True
可以看到pytorch的GPU版也安装成功了
CTRL + D 退出Python命令行,切换到我们创建的第二个虚拟环境
conda activate tf13
conda install tensorflow-gpu==1.13.1
可以看到conda自动帮我们选择了对应的CUDA、CUDNN版本。
$ python
Python 3.6.10 |Anaconda, Inc.| (default, May 8 2020, 02:54:21)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'1.13.1'
>>> tf.test.is_gpu_available()
True
导入tf和测试GPU的时候都会输出一堆信息,不用管,只要命令被正常执行就行。
jupter安装在哪个虚拟环境应该都可以,我习惯把它装在经常使用的环境
conda activate tf_torch
pip install jupyter
生成配置文件
jupyter notebook --generate-config
打开配置文件
vim .jupyter/jupyter_notebook_config.py
修改配置文件
添加以下内容:
# Application(SingletonConfigurable) configuration
#------------------------------------------------------------------------------
## This is an application.
c = get_config()
c.NotebookApp.ip = '*' # 可访问IP
c.NotebookApp.open_browser = False # 启动不打开浏览器
c.NotebookApp.port = 8008 # 访问端口号
## The date format used by logging formatters for %(asctime)s
#c.Application.log_datefmt = '%Y-%m-%d %H:%M:%S'
## The Logging format template
找到下面这行内容删除前面#号,最后改成True
# IP, bypassing same-origin checks.
#
# Local IP addresses (such as 127.0.0.1 and ::1) are allowed as local, along
# with hostnames configured in local_hostnames.
c.NotebookApp.allow_remote_access = True
## Whether to allow the user to run the notebook as root.
#c.NotebookApp.allow_root = False
## DEPRECATED use base_url
#c.NotebookApp.base_project_url = '/'
保存退出
在用户目录下创建workspace文件夹作为jupyter notebook的工作目录
mkdir workspace
cd workspace
jupyter notebook # 启动notebook
成功启动,显示如下
在本地的浏览器访问服务器的外部IP:你设的端口,我这里是8008
出现如下界面:
在Token处填上启动jupyter notebook,终端里面给出的token,New Password填上你给jupyter设的密码,点下面的log in and new password。
这样下次再访问,输入密码就可以了
如果提示Invalid credentials,多半是你复制的token有问题,检查一下。
CTRL + C 退出jupyter,切换到相应虚拟环境安装ipykernel以及给notebook添加kernel。
因为下面的命令需要root权限,所以我们切换到root
sudo -i
参照上面的conda配置,修改root的~/.bashrc
然后依次执行下面命令
source activate tf_torch
conda install ipykernel
python -m ipykernel install --name tf_torch
source activate tf13
conda install ipykernel
python -m ipykernel install --name tf13
logout # 退出sudo
进入workspace目录,启动jupyter notebook
jupyter notebook
输入之前设置的密码登录
点new的下拉,能看到已经有了我们新建的kernel
我们新建文件测试一下环境:
可以看到2个虚拟环境各版本TensorFlow、pytorch的GPU都能正常调用。
而且,同一个ipynb文件可以通过切换kernel的方式,非常方便的切换虚拟环境。
如果不使用GPU服务器,请及时停止,需要的时候再开启
实例停止后,在没有静态IP,自定义镜像、快照的情况下将不再扣费。
但是,还有一点需要注意,GCP的流量费是额外收取的。如果进行大流量操作,可以考虑通过GD来中转。