补丁:Linux 主机 Docker(如有需要)
为何需要补丁:此 Docker 镜像在 Windows 主机上构建,在 Linux 主机上运行时可能会出现问题。
如果你的服务器是 Linux 系统,请在docker容器中执行:
nvidia-smi # 正常情况下应能看到 GPU 信息,若出现"not found libnvidia-ml.so.1"错误,则需要应用补丁。
此时,你可以进入docker容器,尝试以下补丁操作:
cd /usr/lib/x86_64-linux-gnu
ln -sf libnvidia-ml.so.5* libnvidia-ml.so.1
ln -sf libnvidia-ml.so.5* libnvidia-ml.so
ln -sf libcuda.so.5* libcuda.so.1 # 可选
ln -sf libcudadebugger.so.5* libcudadebugger.so.1 # 可选
ldconfig
可以检查 torch 是否正常工作
python -c "import torch; print(torch.zeros(3,3).cuda())"
补丁: LILAB-pkg (如有需要)
为何需要补丁:该 Docker 不支持 NVIDIA 视频解码器/编码器,而主要的 LILAB-pkg 会用到 NVIDIA 视频包,因此需要将 Docker 中的相关包降级为 CPU 视频包。
每当你从 GitHub 上更新 LILAB-pkg 后,都需要执行此补丁操作:
cp -r /root/Downloads/pipeline/LILAB-pkg-patch-for-docker/* ~/LILAB-pkg/
主机8080端口已被占用
如果运行下面命令时出现 "Error starting userland proxy: listen tcp 0.0.0.0:8080: bind: address already in use" 错误,说明主机8080端口已被占用。
docker run --rm -it -p 8080:8080 ...
则需要将端口映射修改为其他端口(如8081,http://localhost:8081/),例如:
docker run --rm -it -p 8081:8080 ...
远程服务器8080端口转发到本地
如果你使用的是 Windows Docker,可以跳过此步骤。
为什么需要转发?
通常情况下,运行 web 界面的客户端电脑(例如,IP 10.50.7.103)和远程服务器(例如,IP 10.50.60.6)位于不同机器上。由于 Chrome 的限制,虽然可以访问 vs-code-server(http://10.50.60.6:8080),但高级功能(文件浏览、Jupyter 等)无法使用。
简单解决方法
将远程服务器的 8080 端口(http://10.50.60.6:8080)转发到本地(http://localhost:8080,即 http://10.50.7.103:8080),Chrome 浏览器即可正常访问。这是因为 Chrome 对 localhost 的访问没有限制。
ssh -L 8080:10.50.60.6:8080 username@10.50.60.6
操作步骤
Windows 客户端电脑可执行以下操作,注意替换 IP 地址为实际的服务器地址和端口。
| 客户端操作系统 | 服务器防火墙 8080 端口 | 代理方法 |
|---|---|---|
| Windows | 已放行 | netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=8080 connectaddress=10.50.60.6 connectport=8080 |
| Linux | 已放行 | socat TCP-LISTEN:8080,bind=127.0.0.1,fork TCP:10.50.60.6:8080 |
| 通用(SSH打洞) | 封闭 | ssh -L 8080:10.50.60.6:8080 username@10.50.60.6 |