ModuleNotFoundError:AWS Batch GPU 实例上没有名为“torch”的模块

问题描述 投票:0回答:1

我有一项作业在 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 实例上运行我的应用程序存在脱节。

我想了解:

  1. 为什么会出现这种脱节/差异?
  2. 在这种情况下如何解决此模块未找到错误?

谢谢!

python amazon-web-services tensorflow torch aws-batch
1个回答
0
投票

我明白了:

  1. 差异是因为我的应用程序被构建到具有所有必要依赖项的 docker 映像中,而不是真正直接在 GPU 实例上运行,为了查看
    torch
    是否安装在 docker 映像中,我需要保持应用程序运行(所以docker 实例已启动,我可以进入),使用此命令进入 docker
    docker exec -it container_id /bin/sh
    ,然后在那里运行命令以查看
    torch
    是否已安装;
  2. 要安装
    torch
    模块,我应该将
    torch
    打包到我的 docker 映像中,而不是通过 .yaml 模板中用于在 GPU 实例上安装/运行的 UserData 来安装;

以防万一其他人将来遇到这个问题,他们可能会发现这篇文章有些帮助;

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.