部署 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项目目前没有维护,我是创建者,希望它至少能给你一些提示。
参见:
- Dockerfile 用于图像构建
- CMake 用于建筑
- Docs 有关编译选项等的更多信息
- C++ inference code
补充说明:
- 它还使用 AWS SDK,您必须至少从这些文件中删除它们
- 你不需要静态编译 - 这将有助于达到尽可能低的(我能想到的)图像大小,但不是绝对必要的(额外的'100MB'左右)
决赛
- 首先尝试 Java,因为它的包装可能更健康(尽管最终图像可能会大一点)
- C++ 方式未针对最新的 PyTorch 版本进行测试,并且可能会随着基本上任何版本的变化而变化
- 不幸的是,通常需要 大量 时间和调试。
我已经在本地训练了我的模型,现在我想在我的 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项目目前没有维护,我是创建者,希望它至少能给你一些提示。
参见:
- Dockerfile 用于图像构建
- CMake 用于建筑
- Docs 有关编译选项等的更多信息
- C++ inference code
补充说明:
- 它还使用 AWS SDK,您必须至少从这些文件中删除它们
- 你不需要静态编译 - 这将有助于达到尽可能低的(我能想到的)图像大小,但不是绝对必要的(额外的'100MB'左右)
决赛
- 首先尝试 Java,因为它的包装可能更健康(尽管最终图像可能会大一点)
- C++ 方式未针对最新的 PyTorch 版本进行测试,并且可能会随着基本上任何版本的变化而变化
- 不幸的是,通常需要 大量 时间和调试。