Sparkmagic 커널을 실행하는 Amazon SageMaker 노트북에서 ModuleNotFoundError를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 6월 15일

Sparkmagic(PySpark) 커널을 사용하여 Amazon SageMaker 노트북 인스턴스를 실행하려고 합니다. pip를 사용하여 Python 라이브러리를 설치했지만 "ModuleNotFoundError: 이름이 my_module_name인 모듈이 없습니다"라는 오류가 발생합니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

Sparkmagic 커널을 사용하는 경우 Amazon SageMaker 노트북은 원격 Amazon EMR 클러스터 또는 AWS Glue 개발 엔드포인트에서 실행되는 Apache Spark 세션의 인터페이스 역할을 합니다.

pip를 사용하여 노트북 인스턴스에 Python 라이브러리를 설치하는 경우 로컬 노트북 인스턴스에서만 이 라이브러리를 사용할 수 있습니다. ModuleNotFoundError를 해결하려면 AWS Glue 개발 엔드포인트 또는 EMR 클러스터의 각 노드에 라이브러리를 설치하십시오.

참고: 라이브러리를 사용하는 코드에 컴퓨팅 파워가 많이 필요하지 않은 경우(예: 결과 보기) 로컬 모드(%%local)를 사용하여 로컬 노트북 인스턴스에서만 셀을 실행할 수 있습니다. 이렇게 하면 원격 클러스터 또는 개발 엔드포인트에 라이브러리를 설치할 필요가 없습니다.

해결 방법

원격 AWS Glue 개발 엔드포인트에 라이브러리를 설치하려면 개발 엔드포인트에서 Python 라이브러리 로딩하기를 참조하십시오.

원격 EMR 클러스터에 라이브러리를 설치하려면 클러스터를 생성할 때 부트스트랩 작업을 사용하면 됩니다. EMR 클러스터를 Amazon SageMaker 노트북 인스턴스에 이미 연결한 경우 모든 클러스터 노드에 라이브러리를 수동으로 설치합니다.

1.    SSH를 사용하여 마스터 노드에 연결하십시오.

2.    라이브러리를 설치합니다. 이 예제에서는 pandas를 설치하는 방법을 보여줍니다.

sudo python -m pip install pandas

3.    모듈이 성공적으로 설치되었는지 확인합니다.

python -c "import pandas as pd; print(pd.__version__)"

4.    Amazon SageMaker 노트북 인스턴스를 열고 커널을 다시 시작합니다.

5.    라이브러리가 예상대로 작동하는지 확인하려면 라이브러리가 필요한 명령을 실행합니다. 예:

pdf = spark.sql("show databases").toPandas()

6.    SSH를 사용하여 다른 클러스터 노드에 연결한 다음 각 노드에 라이브러리를 설치합니다.

원격 클러스터 또는 개발 엔드포인트에서 코드를 실행할 필요가 없는 경우 로컬 노트북 인스턴스를 대신 사용하십시오. 예를 들어 Spark 클러스터의 각 노드에 matplotlib를 설치하는 대신 로컬 모드(%%%local)를 사용하여 로컬 노트북 인스턴스에서 셀을 실행합니다.

다음 예제에서는 결과를 로컬 변수로 내보낸 다음 로컬 모드에서 코드를 실행하는 방법을 보여줍니다.

1.    결과를 로컬 변수로 내보냅니다.

%%sql -o query1
SELECT 1, 2, 3

2.    코드를 로컬에서 실행합니다.

%%local
print(len(query1))

Amazon SageMaker Spark 라이브러리를 사용하여 노트북 인스턴스에서 로컬 Spark 세션을 실행할 수도 있습니다. 이렇게 하면 Spark 파이프라인에서 SageMakerEstimator 예측기를 사용할 수 있습니다. Spark에서 로컬 SparkSession을 사용하여 데이터를 조작할 수 있습니다. 그런 다음 훈련 및 추론에 Amazon SageMaker Spark 라이브러리를 사용합니다. 자세한 내용은 AWS Labs GitHub 리포지토리의 pyspark_mnist_kmeans 예제 노트북을 참조하십시오. 이 예제 노트북은 conda_python3 커널을 사용하며 EMR 클러스터로 지원되지 않습니다. 워크로드가 많은 작업의 경우 원격 Spark 클러스터를 생성한 다음 노트북 인스턴스에 연결합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?