1. 程式人生 > >喜大普奔!TensorFlow終於支援A卡了

喜大普奔!TensorFlow終於支援A卡了

640?wx_fmt=gif

作者 | 非主流

出品 | 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

.0-cp35-cp35m-manylinux1_x86_64.whl
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

/dockerx:/dockerx -v /data/imagenet/tf:/imagenet'
drun rocm/tensorflow:rocm1.8.2-tf1.8-python2

當你使用 ROCm 容器時,以下是一些常用且非常實用的 docker 命令:

  • 一個新的 docker 容器通常不包含元資料儲存庫命令 apt。因此,在嘗試使用 apt 安裝新軟體之前,請首先確保命令 sudo apt update 的正常執行。

  • 出現如下報錯訊息,通常意味著當前使用者無執行 docker 的許可權;你需要使用 sudo 命令或將你的使用者新增到 docker 組。

    640?wx_fmt=png

  • 在正在執行的容器中開啟另一個終端的命令:

640?wx_fmt=png

  • 從主機中複製檔案到正在執行的 docker 上的命令:

640?wx_fmt=png

  • 從正在執行的 docker 容器中複製檔案到主機上的命令:

640?wx_fmt=png

  • 在拉取影象時,收到裝置上沒有剩餘空間的訊息,請檢查 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:
[[254   2   0   0   0   1   0   0   0   0   0   0]
[  3 195   5   5  11   8   4   5   7   0   4  10]
[  0   4 239   0   1   1   9   1   0   0   1   0]
[  0   5   0 220   1   7   2   4   0   1   1  11]
[  1   1   0   0 258   0   4   0   0   2   4   2]
[  2   5   0  15   1 211   2   0   2   0   2  13]
[  1   2  15   0   6   0 240   2   0   0   1   0]
[  1  13   0   0   3   0   2 237   0   1   2   0]
[  0   5   1   0   2   1   1   3 231   2   0   0]
[  0   3   0   0  21   1   3   3   5 225   1   0]
[  0   0   1   1   8   1   3   0   0   2 232   1]
[  0  14   0  34   6   5   5   2   0   1   0 184]]
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 越來越小、準確性越來越高的趨勢。

640?wx_fmt=png

參考連結:

https://medium.com/tensorflow/amd-rocm-gpu-support-for-tensorflow-33c78cc6a6cf

--【完】--

2018 AI開發者大會

AI熱潮下,技術和落地相輔而進。

2018 AI開發者大會以『AI技術與應用』為核心,力邀國內外一線大牛,帶你從專案中貫通AI。

即刻掃碼,搶購福利票!

640?wx_fmt=jpeg

點選「閱讀原文」,精彩資訊搶先看