我有一项作业在 GPU 实例上的 AWS Batch 上运行,我的应用程序使用 torch,即
import torch
计算环境只有一个 GPU 实例,我可以通过 AWS 控制台连接到该实例并运行来确认
torch
在那里可用:
sh-4.2$ python3
Python 3.7.16 (default, Aug 30 2023, 20:37:53)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.__version__)
1.13.1+cu117
>>>
但是,当我提交批处理作业时,它失败了
ModuleNotFoundError: No module named 'torch'
我对此进行了调查,发现: 我的 AWS Batch 作业定义具有以下命令:
CoolGPUJobDefinition:
DependsOn: ComputeRole
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- "/opt/prod/bin/python3"
- "/opt/prod/bin/start.py"
从我的应用程序的堆栈跟踪中,它显示:
File "/opt/prod/lib/python3.8/site-packages/cool_service/slowfast/utils/distributed.py", line 9, in <module>
import torch
ModuleNotFoundError: No module named 'torch'
但是当我尝试在这个GPU实例的
ls -a
目录中/opt
时,它甚至没有prod
:
sh-4.2$ pwd
/opt
sh-4.2$ ls -a
. .. aws containerd nvidia
不知何故,我在 GPU 实例中看到的内容以及 AWS Batch 如何在此 GPU 实例上运行我的应用程序存在脱节。
我想了解:
谢谢!
我明白了:
torch
是否安装在 docker 映像中,我需要保持应用程序运行(所以docker 实例已启动,我可以进入),使用此命令进入 docker docker exec -it container_id /bin/sh
,然后在那里运行命令以查看 torch
是否已安装;torch
模块,我应该将 torch
打包到我的 docker 映像中,而不是通过 .yaml 模板中用于在 GPU 实例上安装/运行的 UserData 来安装;以防万一其他人将来遇到这个问题,他们可能会发现这篇文章有些帮助;
谢谢