我有一個 tensorflow 訓練腳本,我想使用 Docker 容器(基于官方 TF GPU 映像)運行它。盡管一切正常,但使用腳本運行容器非常冗長和丑陋。主要問題是我的訓練腳本允許用戶指定訓練期間使用的各種目錄,用于輸入資料、日志記錄、生成輸出等。我不想改變我的用戶習慣,所以容器需要被告知這些用戶定義的目錄的位置,因此它可以掛載它們。所以我最終得到了這樣的結果:
docker run \
-it --rm --gpus all -d \
--mount type=bind,source=/home/guest/datasets/my-dataset,target=/datasets/my-dataset \
--mount type=bind,source=/home/guest/my-scripts/config.json,target=/config.json \
-v /home/guest/my-scripts/logdir:/logdir \
-v /home/guest/my-scripts/generated:/generated \
train-image \
python train.py \
--data_dir /datasets/my-dataset \
--gpu 0 \
--logdir ./logdir \
--output ./generated \
--config_file ./config.json \
--num_epochs 250 \
--batch_size 128 \
--checkpoint_every 5 \
--generate True \
--resume False
在上面我將一個資料集從主機安裝到容器中,并且還安裝了一個組態檔config.json(它配置了 TF 模型)。我將日志目錄logdir和輸出目錄指定generated為卷。這些資源中的每一個也作為引數傳遞給train.py腳本。
這一切都非常丑陋,但我看不到另一種方法。當然,我可以將所有這些都放在一個 shell 腳本中,并提供命令列引數來從外部設定這些重復值。但這似乎不是一個好的解決方案,因為如果我想對容器進行其他操作,例如檢查日志,我會使用 raw docker 命令。
我懷疑這個問題可能會被標記為基于意見的,但我還沒有找到一個可以推薦給我的用戶的好的解決方案。
uj5u.com熱心網友回復:
正如用戶 Ron van der Heijden 指出的那樣,一種解決方案是docker-compose結合.env檔案中定義的環境變數使用。不錯的答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/450726.html
