docker - 如何在没有 root 权限的 Docker 容器中运行 TensorBoard?
问题描述
我在 Docker 容器中运行 tensorflow-gpu。目前,当我使用 root 权限访问正在运行的 Docker 容器时,我只能运行和访问 TensorBoard。我想在不使用 root 权限的情况下完成此操作。如何实现?
这里有一些关于我在做什么和解决了什么问题的信息:
我使用以下命令使用 TensorFlow 提供的 docker 容器运行 tensorflow-gpu。
$ docker run \
-u $(id -u username):$(id -g username) \
-it --rm --runtime=nvidia \
-v $(realpath ~/data/workspace/notebooks):/tf/notebooks \
-v $(realpath ~/data/workspace/):/tf/workspace \
-v $(realpath ~/data/images/):/tf/images \
-p 8888:8888 -p 6007-6015:6007-6015 tensorflow/tensorflow:2.0.0a0-gpu-py3-jupyter
在启动容器的命令行中,我为 TensorBoard 添加了额外的端口。
在执行以下操作时,我完成了运行 TensorBoard。
- 容器正在运行(使用上面的命令启动)
→每次尝试从正在运行的 Jupyter 笔记本中运行和访问 TensorBoard 都会失败 - 从 docker 主机 PC 我运行以下命令:
$ docker ps
获取容器名称$ sudo docker exec -it <container name> bash
→ 我试过这个有和没有sudo
,没有下面的命令将不起作用tf-docker /tf > tensorboard --logdir <log directory> --port 6007
- 现在我可以访问 TensorBoard
localhost:6007
我是 Docker、TensorFlow 的新手,我是 Linux (Ubuntu) 的新手。我想在不使用 root 权限的情况下完成我上面描述的事情。
- 有没有办法做到这一点?
- 最好/正确的方法是什么?
- 您的最佳实践建议是什么?
编辑 2019-06-24: 我不知道为什么它首先没有锻炼,也许我使用了错误的端口。这是我到现在为止所完成的。
- 我使用以下命令行启动容器,将 TensorBoard 的端口更改为 6006
$ docker run \ -u $(id -u username):$(id -g username) \ -it --rm --runtime=nvidia \ -v $(realpath ~/data/workspace/notebooks):/tf/notebooks \ -v $(realpath ~/data/workspace/):/tf/workspace \ -v $(realpath ~/data/images/):/tf/images \ -p 8888:8888 -p 6006:6006 tensorflow/tensorflow:2.0.0a0-gpu-py3- jupyter
- 然后从命令行我在 docker 容器内启动一个 bash shell,而不使用 root 权限:
$ docker exec -it <container name> bash
- 之后,我启动 TensorBoard 并在 web 浏览器中使用输出中的链接:
tf-docker /tf > tensorboard --logdir <log directory> --port 6007
- 除了之前的命令,我还可以从 Jupyter notebook 启动 Tensorboard。
%reload_ext tensorboard.notebook %tensorboard --logdir=<log directory> --port=6006
编辑 2019-10-09: 由于将 TensorFlow 2.0.0 版本与 TensorBoard 2.0.0 一起使用,我必须启动 TensorBoard 以下内容:
$ tensorboard --logdir=<log directory> --host 0.0.0.0 --port 6006
如果不显式添加主机选项,它将不起作用。
解决方案
我遵循的步骤,我可以用 tensorboard 可视化结果:
- 创建容器时,打开/映射张量板的外部端口:
> nvidia-docker run -d --name tkra_tensorb --ipc=host -it -p 8513:8090 > -p 3014:6006 -v /data:/data tkra_tb
- 在容器内,运行 tensorboard:
> tensorboard --logdir /data/tkra/MyDatasets/resnet101/checkpoints/ > --host 0.0.0.0 --port 6006
在我的浏览器中打开张量板:<server_address>:3014