AI Studio[1] 可以用 GPU,探索下装 gpu 版 tensorflow 和 pytorch。
好像已经不行了,见其 2020-05-15 号 AI Studio临时升级公告。
Environment
系统:Ubuntu 16.04(uname -a
、cat /etc/issue
);
开 gpu 环境,可调nvidia-smi
。driver version:396.37
;在 /usr/local
可见 cuda-9.2/
;显存:16160MiB。
Persistent Directory
有 3 个持久化目录可以放自己东西:
~
,即/home/aistudio/
;~/work/
,放代码,有 100G 空间[2];~/external-libraries/
,这个要自己 mkdir,放自己装的软件;
没用的东西可以弃掉,开环境会自动同步文件,耗时,有时不成功要重试几次。
Independent Projects’ Spaces
好像…每个项目都是独立的空间,新开一个项目发现之前配的环境全都没了。
而且原来它本来就有 conda,不过应该不在持久化目录,还是自己装个 miniconda 吧。
Miniconda
页面上的 上传文件 不能超过 30M,要用 wget 下。Anaconda 太大了,换成 Miniconda[7],装在 external-libraries/
下。
推荐:下载好 Anaconda/Miniconda,放在一个自己创建的数据集中,开新项目的时候挂载这个数据集,就不用每次都下载一次了。见 Custom Data。
装的时候会改 .bashrc 文件,要备份!因为每次启动环境 .bashrc 就会重置,要用这个备份的 .bashrc 替换 ~ 下的 .bashrc,并 source .bashrc
一次。
换 conda 源成清华源[8],自建 .condarc,也要备份,因为重开环境会消失。
cuda
曾经以为要自己装 cuda、cudnn 这些,其实不用,CUDA_HOME
不用设,$LD_LIBRARY_PATH
也不用改。所以参考 [9-11, 13] 可以忽略。
GPU Test
我开了虚拟环境 dl:conda create -n dl python=3.6
,在里面装 tensorflow 和 pytorch,选版本的时候可以参考 [12] 和 pytorch 官网给出的安装命令。
[2] 说自己装了其它库在 external-libraries/ 的话,要在代码前面加两句:
import sys
sys.path.append('/home/aistudio/external-libraries')
而我在虚拟环境里运行的时候,发现好像并不需要。
TensorFlow
安装:conda install -n dl tensorflow-gpu==1.12.0
testing code
#import sys
#sys.path.append("/home/aistudio/external-libraries")
import tensorflow as tf
from tensorflow.python.client import device_lib
print(tf.__version__)
print("\ngpu availiable:\n", tf.test.is_gpu_available())
local_devices = device_lib.list_local_devices()
# 打印所有设备名
print("\nlocal devices:")
print("#devices:", len(local_devices))
for dev in local_devices:
print(dev)
# 打印 gpu 名字
print("\ngpu name:\n", tf.test.gpu_device_name())
x = tf.constant([[1, 2, 3]], dtype="float32")
w = tf.constant([
[1, 2, 3], [4 ,5, 6], [7, 8, 9]], dtype="float32")
for i in range(10):
x = tf.matmul(x, w)
out = x
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print("out:", sess.run(out))
其中,tf.ConfigProto(log_device_placement=True)
可以打印出每个 tensor 放在哪里设备,可以检测它是不是放在 gpu 上。
我还另开一个终端,一边执行,一边在另一个终端多次执行 nvidia-smi
,发现 gpu 有显存占用,应该是成功了吧?
Pytorch
安装:conda install pytorch torchvision cudatoolkit=9.2 -c pytorch
testing code
import torch
flag = torch.cuda.is_available()
print(flag)
ngpu= 1
# Decide which device we want to run on
device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")
print(device)
print(torch.cuda.get_device_name(0))
print(torch.rand(3,3).cuda()
如法测试,也可以。
Custom Data
自己的数据集可以创建数据集,然后挂到项目下[2]。单个文件限 10G。
另外,项目里上传文件有 30M 大小限制,估计只是用来传代码的,太大的文件也可以通过创建数据集的方式进行。上传的文件需要保存就放到持久化目录。
Codes Updating
代码更新比较麻烦,不能在线编辑。
可以在 Gitee 开 repo 做中转站,本地写好 push 上去,再在 AI Studio 的项目里那 clone 和 pull,虽然有点曲折…
需要用到 ssh 免密登录,参考 [16]。记得备份生成在 ~/.ssh/
下的 id_rsa 和 id_rsa.pub 两个文件,因为重开项目又会消失,这样就可以重用在 gitee 添加的 SSH key。这两个文件的权限要设成 400
,否则报错,参考 [17]。
branchs
如果 git 里开了分支,比如 dev
分支,push 的时候可以:git push origin dev:dev
,或者如果本地 git 本身就在 dev 下,可以简写:git push origin dev
;
pull 的时候:git pull origin dev:dev
,或者 ai studio 的 git 本身就在 dev 下,可以简写:git pull origin dev
。参考 [19]。
clone 某个分支,用--branch
参数:git clone
--branch <BRANCH_NAME>
<REPO>
multiple remote repositories
远程仓库的别名一般叫 origin
,但关联多个远程仓库(如 github 和 gitee)时,可以改易于分辨的别名。
例如一个仓库同时关联 github 和 gitee 的一个仓库,分别取别名 github 和 gitee:
git remote add
github
git@github.com:某
git remote add
gitee
git@gitee.com:某
。
push/pull 的时候分别名操作:
git pull
github
master:master
git push
gitee
dev:dev
clone
clone 时取别名用-o
:git clone
-o <ALIAS>
<REPO>
。
如果有多个分支,如 dev,则 clone 之后用 git checkout -b dev origin/dev
拉下来,同时绑定了本地 dev 和 远程 origin/dev 的 track 关系,可以直接用 git push/pull 而不用加参数[20]。(我之前直接用git pull gitee dev:dev
会出现奇怪的事情,就是拉下来的 dev 中的内容会影响到 master 的内容,然后…一顿莫名其妙)
Auxiliary Scripts
将初始化环境的命令写入 shell 文件,方便执行:
#!/bin/bash
# init.sh
echo "init env..."
cd
# .bashrc
rm .bashrc
cp work/bashrc.bak .bashrc
source .bashrc # 这句好像没有效果?
# .condarc
cp work/condarc.bak .condarc
# .ssh
mkdir .ssh
cp work/id_rsa .ssh
cp work/id_rsa.pub .ssh
echo "finish"
要执行 source
那行需要用 bash(ubuntu 默认 sh 是 dash),见 [18],但似乎不见效果?手动 source 一次。
References
- AI Studio
- 常见问题
- 白嫖百度 Tesla V100 笔记(在 AI Studio 上使用 tensorflow 和 pytorch 的方法)
- 百度paddlepaddle平台如何配置tensorflow-gpu?
- 百度 AI Studio 使用记录
- AI Studio下如何跑tensorflow
- Miniconda
- Anaconda 镜像使用帮助
- CUDA Toolkit 9.0 Downloads
- ImportError: libcuda.so.1: cannot open shared object file: No such file or directory #34872
- libcuda.so.1 | CSDN 下载
- tensorflow CUDA cudnn 版本对应关系
- what is XLA_GPU and XLA_CPU for tensorflow
- tensorflow-gpu测试代码
- pytorch:测试GPU是否可用
- 远程仓库
- SSH Key: “Permissions 0644 for ‘id_rsa.pub’ are too open.” on mac
- Getting a ‘source: not found’ error when using source in a bash script
- git push & git pull 推送/拉取分支
- git 拉取远程指定分支 pull本地不存在的分支