喜大普奔!TensorFlow終於支援A卡了
作者 | 非主流
出品 | AI科技大本營
工資不漲,英偉達 GPU 的售價年年漲。因此,多一個競爭對手,總是好事。
近日,Google 宣佈推出適用於 ROCm GPU 的 TensorFlow v1.8,其中包括 Radeon Instinct MI25。對於 AMD 正在進行的深度學習加速工作而言,這是一座重大的里程碑。
ROCm 即 Radeon 開放生態系統 (Radeon Open Ecosystem),是我們在 Linux 上進行 GPU 計算的開源軟體基礎。而 TensorFlow 實現則使用了 MIOpen,這是一個適用於深度學習的高度優化 GPU 例程庫。
AMD 提供了一個預構建的 whl 軟體包,安裝過程很簡單,類似於安裝 Linux 通用 TensorFlow。目前 Google 已釋出安裝說明及預構建的 Docker 映像。下面,我們就來手把手地教大家。
▌如何在 AMD 的 GPU 上執行 TensorFlow?
首先,你需要安裝開源 ROCm 堆疊,詳細的安裝說明可以參考:
https://rocm.github.io/ROCmInstall.html
然後,你需要安裝其他相關的 ROCm 軟體包:
sudo apt update
sudo apt install rocm-libs miopen-hip cxlactivitylogger
最後,安裝 TensorFlow (通過 Google 預先構建的 whl 軟體包):
sudo apt install wget python3-pip
wget http://repo.radeon.com/rocm/misc/tensorflow/tensorflow-1.8
pip3 install ./tensorflow-1.8.0-cp35-cp35m-manylinux1_x86_64.whl
▌ROCm-docker 安裝指南
Rocm-docker 的安裝指南:
https://github.com/RadeonOpenCompute/ROCm-docker/blob/master/quick-start.md
啟動 TensorFlow v1.8 docker 映像:
alias drun='sudo docker run -it --network=host --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $HOME
drun rocm/tensorflow:rocm1.8.2-tf1.8-python2
當你使用 ROCm 容器時,以下是一些常用且非常實用的 docker 命令:
一個新的 docker 容器通常不包含元資料儲存庫命令 apt。因此,在嘗試使用 apt 安裝新軟體之前,請首先確保命令 sudo apt update 的正常執行。
出現如下報錯訊息,通常意味著當前使用者無執行 docker 的許可權;你需要使用 sudo 命令或將你的使用者新增到 docker 組。
在正在執行的容器中開啟另一個終端的命令:
從主機中複製檔案到正在執行的 docker 上的命令:
從正在執行的 docker 容器中複製檔案到主機上的命令:
在拉取影象時,收到裝置上沒有剩餘空間的訊息,請檢查 docker 引擎正在使用的儲存驅動程式。如果是“裝置對映器 (device mapper)”,這意味著“裝置對映器”儲存驅動程式限制了影象大小限制,此時你可以參考快速入門指南中關於更改儲存驅動程式的解決方案,連結如下:
https://github.com/RadeonOpenCompute/ROCm-docker/blob/master/quick-start.md
▌實踐指南
1、影象識別
我們將使用 TensorFlow 的一個教程作為 Inception-v3 影象識別任務:
https://www.tensorflow.org/tutorials/image_recognition
以下是如何執行程式碼:
cd ~ && git clone https://github.com/tensorflow/models.git
cd ~/models/tutorials/image/imagenet
python3 classify_image.py
之後,你會看到一個帶有相關分數的標籤列表,上面的指令碼是用於對熊貓的影象進行分類,所以你會看到下面的結果:
giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89103)
indri, indris, Indri indri, Indri brevicaudatus (score = 0.00810)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00258)
custard apple (score = 0.00149)
earthstar (score = 0.00141)
2、語音識別
接下來,讓我們試試 TensorFlow 的語音識別教程:
https://www.tensorflow.org/tutorials/audio_recognition
以下是執行程式碼:
cd ~ && git clone https://github.com/tensorflow/tensorflow.git
cd ~/tensorflow
python3 tensorflow/examples/speech_commands/train.py
在預設設定下執行幾個小時後,你將看到準確度越來越高的趨勢:
[
INFO:tensorflow:Step 18000: Validation accuracy = 88.7% (N=3093)
INFO:tensorflow:Saving to "/tmp/speech_commands_train/conv.ckpt-18000"
INFO:tensorflow:set_size=3081
INFO:tensorflow:Confusion Matrix:
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]]
INFO:tensorflow:Final test accuracy = 88.5% (N=3081)
如果你想測試訓練好的模型,可以嘗試以下方法:
python3 tensorflow/examples/speech_commands/freeze.py \
--start_checkpoint=/tmp/speech_commands_train/conv.ckpt-18000 \
--output_file=/tmp/my_frozen_graph.pb
python3 tensorflow/examples/speech_commands/label_wav.py --graph=/tmp/my_frozen_graph.pb --labels=/tmp/speech_commands_train/conv_labels.txt --wav=/tmp/speech_dataset/left/a5d485dc_nohash_0.wav
你會看到“left”標籤的得分最高:
left (score = 0.74686)
right (score = 0.12304)
unknown (score = 0.10759)
3、多 GPU 訓練
最後,讓我們用多個 GPU 來訓練 ResNet-50。我們將使用 TensorBoard 來監控進度,因此我們的工作流程分為兩個終端和一個瀏覽器。首先,我們假設你將 ImageNet 資料集放在“/ data / imagenet”(可更改)下。
1) 第一個終端
cd ~ && git clone https://github.com/tensorflow/benchmarks.git
cd ~/benchmarks
git checkout -b may22 ddb23306fdc60fefe620e6ce633bcd645561cb0d
MODEL=resnet50
NGPUS=4
BATCH_SIZE=64
ITERATIONS=5000000
TRAIN_DIR=trainbenchmarks${MODEL}
rm -rf "${TRAIN_DIR}"
python3 ./scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \
--model=${MODEL} --data_name=imagenet --data_dir=/data/imagenet \
--train_dir="${TRAIN_DIR}" --print_training_accuracy=True \
--summary_verbosity 2 --save_summaries_steps 10 --save_model_secs=3600 \
--variable_update=parameter_server --local_parameter_device=cpu \
--num_batches=${ITERATIONS} --batch_size=${BATCH_SIZE} \
--num_gpus=${NGPUS} 2>&1 | tee /dockerx/tf-imagenet.txt
2) 第二個終端
hostname -I # find your IP address
tensorboard --logdir train_benchmarks_resnet --host <ip_address>
3) 在瀏覽器裡開啟 Tensorboard
連結: http://<ip_address>:6006/
使用 TensorBoard,你可以看到 loss 越來越小、準確性越來越高的趨勢。
參考連結:
https://medium.com/tensorflow/amd-rocm-gpu-support-for-tensorflow-33c78cc6a6cf
--【完】--
2018 AI開發者大會AI熱潮下,技術和落地相輔而進。
2018 AI開發者大會以『AI技術與應用』為核心,力邀國內外一線大牛,帶你從專案中貫通AI。
即刻掃碼,搶購福利票!
點選「閱讀原文」,精彩資訊搶先看