在 AWS Nitro Enclave 中导入 openCV 时 Python 代码挂起

Posted

技术标签:

【中文标题】在 AWS Nitro Enclave 中导入 openCV 时 Python 代码挂起【英文标题】:Python code hangs when importing openCV in AWS Nitro Enclave 【发布时间】:2021-09-29 08:19:35 【问题描述】:

我正在尝试使用 python 在 AWS nitro-enclave 内进行一些图像识别。但是在导入 OpenCV、NumPy 和 pandas 等包时,代码会挂起。用于构建 enclave 的 dockerfile 文件将在我的本地机器或 EC2 中正常运行。生成的 enclave 控制台将输出一些关于 L2 缓存大小和进程冻结的 openBLAS 警告。没有任何类型的错误输出。 在 enclave 中使用包时是否需要添加任何其他依赖项或与内核发生冲突?

docker、shell、py测试代码如下:

#amazonlinux still have the import issue
#python:3.7 libs importing crush
FROM amazonlinux

WORKDIR /app
#py 3.7
RUN yum install python3 zip -y

ENV VIRTIAL_ENV=/opt/venv
RUN python3 -m venv $VIRTIAL_ENV
ENV PATH="$VIRTIAL_ENV/bin:$PATH"

#3 libs needed for cv2 import
RUN yum install libSM-1.2.2-2.amzn2.x86_64 -y
RUN yum install libXrender-0.9.10-1.amzn2.x86_64 -y
RUN yum install libXext-1.3.3-3.amzn2.x86_64 -y

COPY requirements.txt ./
RUN pip3 install --no-cache-dir -r /app/requirements.txt

#shell script testing
COPY dockerfile_entrypoint.sh ./

COPY test_cv2.py ./


#ENV for shell testing printf loop
ENV HELLO="Hello from enclave side!"
RUN chmod +X dockerfile_entrypoint.sh

#shell script testing
CMD ["/app/dockerfile_entrypoint.sh"]
#!/bin/bash

#shell printf loop test in enclave
# go to work dir and check files
cd /app||return
ls

#cv2 imp issue
python3 test_cv2.py

#use shell loop to keep enclave live to see error message output
count=1
while true;do
  printf "[%4d] $HELLO\n" $count
  echo "$PWD"
  ls
  count=$((count+1))
  sleep 5
done
import cv2

for i in range(10):
    print('testing OpenCV')

【问题讨论】:

【参考方案1】:

当应用程序或库尝试从 /dev/random 读取数据但没有足够的熵时,可能会发生这些类型的挂起,这会导致进程在读取时阻塞。在这个 GitHub 问题中有一些可能的解决方案:https://github.com/aws/aws-nitro-enclaves-sdk-c/issues/41#issuecomment-792621500

【讨论】:

以上是关于在 AWS Nitro Enclave 中导入 openCV 时 Python 代码挂起的主要内容,如果未能解决你的问题,请参考以下文章

AWS扩展EBS卷——Linux文件系统

爬虫可以更新 AWS Glue 中导入的表吗?

看 AWS 如何通过 Nitro System 构建竞争壁垒

将内容从旧 EBS 卷复制到 AWS 中的新 Nitro 系统 EBS 的最佳方式(最简单/最快)?

AWS C4升级-基于Nitro(C5,R5,M5)无法启动问题)

Amzaon EC2虚拟化技术演进:从 Xen 到 Nitro