如何在Docker内运行PyTorch模型服务器?

3

我试图创建一个Docker镜像,以便将其作为服务器运行,用于提供PyTorch模型服务。

我在本地计算机上将.pt模型文件转换为.MAR文件,然后将.MAR文件复制到Docker镜像中。我创建了一个Dockerfile:

FROM ubuntu:18.04
ENV TZ=Asia/Shanghai
ENV DEBIAN_FRONTEND noninteractive 
RUN apt-get update \
    && apt-get install --yes --no-install-recommends \
    tzdata

RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime\ 
    && echo ${TZ} > /etc/timezone \
    && dpkg-reconfigure -f noninteractive tzdata

RUN apt-get install python3 python3-dev python3-pip openjdk-11-jre-headless git wget curl -y
RUN python3 -m pip install torch torchvision torch-model-archiver torchserve==0.2.0
COPY densenet161.mar /model_store/
CMD torchserve --start --model-store model_store --models densenet161=densenet161.mar
EXPOSE 8080

我能够创建镜像,但我无法访问该容器。当我尝试打开镜像并运行代码时,它能够正常工作。

docker exec -it 4b126bd87f21 sh

# torchserve --start --ncs --model-store model_store --models densenet161.mar

服务器正在运行。当我运行docker镜像时,它无法工作。Docker容器正在运行,但我无法访问服务器。

我不知道问题出在哪里。


你遇到了什么样的错误?如果像是无法访问主机,那么在使用 docker run 运行容器时尝试添加 --net host 命令。 - eroot163pi
Docker运行后容器会自动停止的问题 - Andrei Belousov
2个回答

2

我希望我理解了这个问题。

当您执行 docker run torchserve:local .... 时,默认情况下它会运行 CMD,也就是 torchserve --start --model-store model_store --models densenet161=densenet161.mar,但由于该命令在后台运行,您新创建的 docker 容器会立即退出。为了防止 docker 退出,可以添加 tail -f /dev/null

查看 torchserve 的官方 docker 入口点 https://github.com/pytorch/serve/blob/master/docker/dockerd-entrypoint.sh#L12,他们在结尾处加入 tail 命令以防止 docker 退出。


@mohamed-fazil 你能确认吗? - eroot163pi
@mohamed-fazil 如果这个解决方案有效,请接受它。 - eroot163pi
我遇到了这个问题,并发现在使用torchserve时,将--foreground作为参数运行它,可以使其在前台运行,从而避免Docker容器退出。https://pytorch.org/serve/configuration.html - Irakli Salia

0

我的建议是重新构建图像。

提示: 始终为您使用的容器命名 --name 标签 例如:docker run --name container_name

尝试使用 bash 访问:docker exec -it 4b126bd87f21 bash


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接