运行 Docker 容器时避免重复参数
tensorflow 440
原文标题 :Avoiding duplicated arguments when running a Docker container
我有一个 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 命令。
我怀疑这个问题可能会被标记为基于意见的,但我还没有找到一个可以推荐给我的用户的好的解决方案。