部署 Pytorch 仅用于预测

Deploying Pytorch only for prediction

我已经在本地训练了我的模型,现在我想在我的 Kubernetes 集群中使用它。不幸的是,Pytorch 的所有 Docker 图像都是 5+ GB,因为它们包含我现在不需要的训练脚本。我创建了自己的图像,它只有 3.5 GB,但仍然很大。是否有用于预测的 slim Pytorch 版本?如果不能,我可以安全地删除包的哪些部分以及如何删除?

不幸的是,Python 版本的 PyTorch 没有简单的答案(或者至少 none 我知道)。

Python,一般来说,对于 Docker 部署来说不是 well-suited,因为它继承了依赖项(即使你不需要它们的所有功能,导入通常是在文件的顶部使得您上述删除对于 PyTorch 大小和复杂性的项目不可行)。

虽然有出路...

手电筒脚本

根据您训练的模型,您可以将其转换为 traced/scripted 版本(参见 here)。在你管理之后:

其他语言的推理

用另一种语言编写推理代码,Java 或 C++(有关详细信息,请参阅 here)。

我只使用过 C++,但我认为 Java 可能更容易实现。

结果

设法使 PyTorch 的 CPU 推理达到大约 ~32MB,GPU 会更重并且更复杂,并且可能需要 ~1GB 的 CUDNN 依赖本身。

C++ 方式

请注意torchlambda项目目前没有维护,我是创建者,希望它至少能给你一些提示。

参见:

补充说明:

  • 它还使用 AWS SDK,您必须至少从这些文件中删除它们
  • 你不需要静态编译 - 这将有助于达到尽可能低的(我能想到的)图像大小,但不是绝对必要的(额外的'100MB'左右)

决赛

  • 首先尝试 Java,因为它的包装可能更健康(尽管最终图像可能会大一点)
  • C++ 方式未针对最新的 PyTorch 版本进行测试,并且可能会随着基本上任何版本的变化而变化
  • 不幸的是,通常需要 大量 时间和调试。