基于Docker的ML服务架构

8fsztsew  于 2023-02-18  发布在  Docker
关注(0)|答案(1)|浏览(109)

我正在开发一个图像分割服务的早期阶段,目前我有一个简单的Flask服务器,负责接收数据,并在本地GPU服务器中运行一个带有AI模型的docker容器,但我也考虑一些异步的东西,比如FastAPI或Nodejs,来实现一些预测任务的调度器,哪个更好:a)当服务器通过ssh调用docker容器,docker容器只在被调用时运行,预测图像,保存结果和停止,或者b)在AI容器内运行API服务器?每个容器大约5- 10 GB。运行所有容器看起来更昂贵,但我不确定哪种做法更好。
每次我都试着打电话给集装箱,在工作完成后停下来。

lp0sw83n

lp0sw83n1#

您应该避免基于动态启动容器的方法和基于ssh的方法。我建议使用接受一些网络输入的长时间运行的进程,就像您现有的Flask服务器一样,并且要么始终运行ML模型,要么将其作为子进程启动。
如果你可以使用一个子进程,它可以很好的匹配这里。当子进程退出时,它所有的内存资源将被自动清理,所以当它不被使用时,你不会有子进程的成本。如果容器碰巧退出,子进程将被清理。子进程也是基本的Unix功能,因此您可以在本地开发服务,而不需要任何特别复杂设置。
动态启动容器会带来很多挑战,它将应用程序与Docker API绑定在一起,这将使其更难运行,即使在本地开发中也是如此。使用该API可以赠款对主机系统的无限制根级别访问权限(你可以非常容易地运行一个危及主机的容器)。你需要记住在你自己的容器之后进行清理。该设置可能无法在其他容器系统(如Kubernetes)中运行,因为它们不提供Docker套接字。
基于ssh的系统具有不同的复杂性。您需要将凭据分发到不同的位置。如果您尝试在Docker容器中运行ssh守护进程,则很难安全地配置(什么创建主机密钥?如何提供用户和私钥?)。您还需要考虑ssh传输的各种故障情况,这些情况可能不会出现在纯本地系统中。

相关问题