

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 로컬 코드를 SageMaker 훈련 작업으로 실행
<a name="train-remote-decorator"></a>

로컬 기계 학습(ML) Python 코드를 대규모 단일 노드 Amazon SageMaker 훈련 작업 또는 다중 병렬 작업으로 실행할 수 있습니다. 다음 코드 예제와 같이 @remote 데코레이터로 코드에 주석을 달면 됩니다. 원격 함수에서는 [분산 훈련](https://docs.aws.amazon.com/sagemaker/latest/dg/distributed-training.html)(여러 인스턴스에 걸침)이 지원되지 않습니다.

```
@remote(**settings)
def divide(x, y):
    return x / y
```

SageMaker Python SDK는 기존 작업 영역 환경, 관련된 모든 데이터 처리 코드 및 데이터세트를 SageMaker 훈련 플랫폼에서 실행되는 SageMaker 훈련 작업으로 자동 변환합니다. 또한 영구 캐시 기능을 활성화하면 이전에 다운로드한 종속성 패키지를 캐싱하여 작업 시작 지연 시간을 더욱 줄일 수 있습니다. 이 작업 지연 시간 감소는 SageMaker AI 관리형 웜 풀만 사용할 때의 지연 시간 감소보다 큽니다. 자세한 내용은 [영구 캐시 사용](train-warm-pools.md#train-warm-pools-persistent-cache) 단원을 참조하십시오.

**참고**  
원격 함수에서는 분산 훈련 작업이 지원되지 않습니다.

다음 섹션에서는 @remote 데코레이터로 로컬 ML 코드에 주석을 달고 사용 사례에 맞게 환경을 조정하는 방법을 보여줍니다. 여기에는 환경을 사용자 지정하고 SageMaker 실험과 통합하는 것이 포함됩니다.

**Topics**
+ [환경 설정](#train-remote-decorator-env)
+ [원격 함수 간접 호출](train-remote-decorator-invocation.md)
+ [구성 파일](train-remote-decorator-config.md)
+ [런타임 환경 사용자 지정](train-remote-decorator-customize.md)
+ [컨테이너 이미지 호환성](train-remote-decorator-container.md)
+ [Amazon SageMaker Experiments를 사용하여 파라미터 및 지표 로깅하기](train-remote-decorator-experiments.md)
+ [@remote 데코레이터와 함께 모듈식 코드 사용하기](train-remote-decorator-modular.md)
+ [런타임 종속성을 위한 프라이빗 리포지토리](train-remote-decorator-private.md)
+ [예제 노트북](train-remote-decorator-examples.md)

## 환경 설정
<a name="train-remote-decorator-env"></a>

다음 세 가지 옵션 중 하나를 선택하여 환경을 설정합니다.

### Amazon SageMaker Studio Classic에서 코드 실행
<a name="train-remote-decorator-env-studio"></a>

SageMaker 노트북을 만들고 SageMaker Studio Classic 이미지에서 사용 가능한 이미지를 첨부하여 SageMaker Studio Classic에서 로컬 ML 코드에 주석을 달고 실행할 수 있습니다. 다음 지침은 SageMaker 노트북을 만들고 SageMaker Python SDK를 설치하며 데코레이터로 코드에 주석을 다는 데 도움이 됩니다.

1. 다음과 같이 SageMaker 노트북을 만들고 SageMaker Studio Classic에서 이미지를 첨부합니다.

   1. *Amazon SageMaker AI 개발자 안내서*의 [Amazon SageMaker Studio Classic 시작](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)에 있는 지침을 따릅니다.

   1. 왼쪽 탐색 창에서 **Studio**를 선택합니다. 그러면 새 창이 열립니다.

   1. **시작하기** 대화 상자의 아래쪽 화살표에서 사용자 프로필을 선택합니다. 새 창이 열립니다.

   1. **Open Studio Classic**을 선택합니다.

   1. 기본 작업 영역에서 **런처 열기**를 선택합니다. 그러면 새 페이지가 열립니다.

   1. 기본 작업 영역에서 **노트북 생성**을 선택합니다.

   1. **환경 변경** 대화 상자의 **이미지** 옆에 있는 아래쪽 화살표에서 **Base Python 3.0**을 선택합니다.

      @remote 데코레이터는 SageMaker Studio Classic 노트북에 첨부된 이미지를 자동으로 감지하고 이를 사용하여 SageMaker 훈련 작업을 실행합니다. `image_uri`가 데코레이터 또는 구성 파일에서 인수로 지정된 경우 감지된 이미지 대신 `image_uri`에서 지정된 값이 사용됩니다.

      SageMaker Studio Classic에서 노트북을 생성하는 방법에 대한 자세한 내용은 [Amazon SageMaker Studio Classic 노트북 생성 또는 열기](https://docs.aws.amazon.com/sagemaker/latest/dg/notebooks-create-open.html#notebooks-create-file-menu)의 **파일 메뉴에서 노트북 생성** 섹션을 참조하세요.

      사용 가능한 이미지 목록은 [지원되는 도커 이미지](https://docs.aws.amazon.com/sagemaker/latest/dg/train-remote-decorator-container.html)를 참조하세요.

1. SageMaker Python SDK를 설치합니다.

   SageMaker Studio Classic 노트북 내에서 @remote 함수를 사용하여 코드에 주석을 달려면 SageMaker Python SDK가 설치되어 있어야 합니다. 다음 코드 예제처럼 SageMaker Python SDK를 설치합니다.

   ```
   !pip install sagemaker
   ```

1. @remote 데코레이터를 사용하여 SageMaker 훈련 작업에서 함수를 실행할 수 있습니다.

   로컬 ML 코드를 실행하려면 먼저 종속 파일을 생성하여 SageMaker AI에 로컬 코드의 위치를 지정하도록 합니다. 이렇게 하려면 다음 단계를 따릅니다.

   1. SageMaker Studio Classic 런처 기본 작업 영역의 **유틸리티 및 파일**에서 **텍스트 파일**을 선택합니다. 그러면 텍스트 파일 `untitled.txt.`가 있는 새 탭이 열립니다.

      SageMaker Studio Classic 사용자 인터페이스(UI)에 대한 자세한 내용은 [Amazon SageMaker Studio Classic UI 개요](https://docs.aws.amazon.com//sagemaker/latest/dg/studio-ui.html)를 참조하세요.

   1. `untitled.txt `을 `requirements.txt`로 바꿉니다.

   1. SageMaker AI 라이브러리와 함께 코드에 필요한 모든 종속성을 `requirements.txt`에 추가합니다.

      예제 `divide` 함수에서 `requirements.txt`의 최소 코드 예제가 다음 섹션에 다음과 같이 제공됩니다.

      ```
      sagemaker
      ```

   1. 다음과 같이 종속 파일을 전달하여 원격 데코레이터로 코드를 실행합니다.

      ```
      from sagemaker.remote_function import remote
      
      @remote(instance_type="ml.m5.xlarge", dependencies='./requirements.txt')
      def divide(x, y):
          return x / y
      
      divide(2, 3.0)
      ```

      추가 코드 예제는 샘플 노트북 [quick\_start.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-remote-function/quick_start/quick_start.ipynb)를 참조하세요.

      이미 SageMaker Studio Classic 노트북을 실행하고 있는 경우 **2의 지침에 따라 Python SDK를 설치하세요. SageMaker Python SDK를 설치**하고 커널을 다시 시작해야 합니다. 자세한 내용은 *Amazon SageMaker AI 개발자 안내서*의 [SageMaker Studio Classic 노트북 도구 모음 사용](https://docs.aws.amazon.com/sagemaker/latest/dg/notebooks-menu.html)을 참조하세요.

### Amazon SageMaker Studio에서 코드 실행
<a name="train-remote-decorator-env-notebook"></a>

SageMaker 노트북 인스턴스에서 로컬 ML 코드에 주석을 달 수 있습니다. 다음 지침은 사용자 지정 커널로 노트북 인스턴스를 생성하고 SageMaker Python SDK를 설치하며 데코레이터로 코드에 주석을 다는 방법을 보여줍니다.

1. 사용자 지정 `conda` 커널을 사용하여 노트북 인스턴스를 생성합니다.

   SageMaker 훈련 작업 내에서 사용할 @remote 데코레이터로 로컬 ML 코드에 주석을 달 수 있습니다. 먼저 Python 버전 3.7 이상(최대 3.10.x)의 커널을 사용하도록 SageMaker 노트북 인스턴스를 생성하고 사용자 지정해야 합니다. 이렇게 하려면 다음 단계를 따릅니다.

   1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔을 엽니다.

   1. 왼쪽 탐색 패널에서 **노트북**을 선택하여 옵션을 확장합니다.

   1. 확장된 옵션에서 **노트북 인스턴스**를 선택합니다.

   1. **노트북 인스턴스 생성** 버튼을 선택합니다. 그러면 새 페이지가 열립니다.

   1. **노트북 인스턴스 이름**의 경우 최대 63자로 공백 없이 이름을 입력합니다. 유효한 문자: **A-Z**, **a-z**, **0-9** 및 **.****:****\+****=****@**** \_****%****-**(하이픈).

   1. **노트북 인스턴스 설정** 대화 상자에서 **추가 구성** 옆의 오른쪽 화살표를 확장합니다.

   1. **수명 주기 구성 - 선택 사항**에서 아래쪽 화살표를 확장한 후 **새 수명 주기 구성 생성**을 선택합니다. 그러면 새 대화 상자가 열립니다.

   1. **이름**에 구성 설정 이름을 입력합니다.

   1. **스크립트** 대화 상자의 **노트북 시작** 탭에서 텍스트 상자의 기존 콘텐츠를 다음과 같은 스크립트로 바꿉니다.

      ```
      #!/bin/bash
      
      set -e
      
      sudo -u ec2-user -i <<'EOF'
      unset SUDO_UID
      WORKING_DIR=/home/ec2-user/SageMaker/custom-miniconda/
      source "$WORKING_DIR/miniconda/bin/activate"
      for env in $WORKING_DIR/miniconda/envs/*; do
          BASENAME=$(basename "$env")
          source activate "$BASENAME"
          python -m ipykernel install --user --name "$BASENAME" --display-name "Custom ($BASENAME)"
      done
      EOF
      
      echo "Restarting the Jupyter server.."
      # restart command is dependent on current running Amazon Linux and JupyterLab
      CURR_VERSION_AL=$(cat /etc/system-release)
      CURR_VERSION_JS=$(jupyter --version)
      
      if [[ $CURR_VERSION_JS == *$"jupyter_core     : 4.9.1"* ]] && [[ $CURR_VERSION_AL == *$" release 2018"* ]]; then
       sudo initctl restart jupyter-server --no-wait
      else
       sudo systemctl --no-block restart jupyter-server.service
      fi
      ```

   1. **스크립트** 대화 상자의 **노트북 생성** 탭에서 텍스트 상자의 기존 콘텐츠를 다음과 같은 스크립트로 바꿉니다.

      ```
      #!/bin/bash
      
      set -e
      
      sudo -u ec2-user -i <<'EOF'
      unset SUDO_UID
      # Install a separate conda installation via Miniconda
      WORKING_DIR=/home/ec2-user/SageMaker/custom-miniconda
      mkdir -p "$WORKING_DIR"
      wget https://repo.anaconda.com/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh -O "$WORKING_DIR/miniconda.sh"
      bash "$WORKING_DIR/miniconda.sh" -b -u -p "$WORKING_DIR/miniconda" 
      rm -rf "$WORKING_DIR/miniconda.sh"
      # Create a custom conda environment
      source "$WORKING_DIR/miniconda/bin/activate"
      KERNEL_NAME="custom_python310"
      PYTHON="3.10"
      conda create --yes --name "$KERNEL_NAME" python="$PYTHON" pip
      conda activate "$KERNEL_NAME"
      pip install --quiet ipykernel
      # Customize these lines as necessary to install the required packages
      EOF
      ```

   1. 창 오른쪽 하단에 있는 **구성 생성** 버튼을 선택합니다.

   1. 창 오른쪽 하단에 있는 **노트북 인스턴스 생성** 버튼을 선택합니다.

   1. 노트북 인스턴스 **상태**가 **대기 중**에서 **서비스 중**으로 변경될 때까지 기다립니다.

1. 노트북 인스턴스에서 Jupyter notebook을 생성합니다.

   다음 지침은 새로 만든 SageMaker 인스턴스에서 Python 3.10을 사용하여 Jupyter notebook을 만드는 방법을 보여줍니다.

   1. 이전 단계의 노트북 인스턴스 **상태**가 **서비스 중**일 때 다음을 수행합니다.

      1. 새로 만든 노트북 인스턴스 **이름**이 들어 있는 행의 **작업**에서 **Jupyter 열기**를 선택합니다. 그러면 새 Jupyter 서버가 열립니다.

   1. Jupyter 서버의 오른쪽 상단 메뉴에서 **새로 만들기**를 선택합니다.

   1. 아래쪽 화살표에서 **conda\_custom\_python310**을 선택합니다. 이렇게 하면 Python 3.10 커널을 사용하는 새로운 Jupyter notebook이 만들어집니다. 이제 이 새로운 Jupyter notebook을 로컬 Jupyter notebook과 비슷하게 사용할 수 있습니다.

1. SageMaker Python SDK를 설치합니다.

   가상 환경을 실행한 후 다음 코드 예제를 사용하여 SageMaker Python SDK를 설치합니다.

   ```
   !pip install sagemaker
   ```

1. @remote 데코레이터를 사용하여 SageMaker 훈련 작업에서 함수를 실행할 수 있습니다.

   SageMaker 노트북 내에서 @remote 데코레이터로 로컬 ML 코드에 주석을 달면 SageMaker 훈련에서 자동으로 코드 함수를 해석하여 이를 SageMaker 훈련 작업으로 실행합니다. 다음을 따라 노트북을 설정합니다.

   1. 1단계인 **사용자 지정 커널로 SageMaker 노트북 인스턴스 생성하기**에서 만든 SageMaker 노트북 인스턴스의 노트북 메뉴에서 커널 이름을 선택합니다.

      자세한 내용은 [이미지 또는 커널 변경](https://docs.aws.amazon.com/sagemaker/latest/dg/notebooks-run-and-manage-change-image.html)을 참조하세요.

   1. 아래쪽 화살표에서 3.7 이상의 Python 버전을 사용하는 사용자 지정 `conda` 커널을 선택합니다.

      예를 들어 `conda_custom_python310` 선택 시 Python 3.10용 커널이 선택됩니다.

   1. **선택**을 선택하세요.

   1. 커널 상태가 유휴로 표시될 때까지 기다립니다. 이는 커널이 시작되었음을 나타냅니다.

   1. Jupyter 서버 홈 오른쪽 상단 메뉴에서 **새로 만들기**를 선택합니다.

   1. 아래쪽 화살표 옆에서 **텍스트 파일**을 선택합니다. 그러면 새 텍스트 파일 `untitled.txt.`가 생성됩니다.

   1. `untitled.txt`을 `requirements.txt`로 이름을 변경하고 `sagemaker`과 함께 코드에 필요한 모든 종속성을 추가합니다.

   1. 아래와 같이 종속 파일을 전달하여 원격 데코레이터로 코드를 실행합니다.

      ```
      from sagemaker.remote_function import remote
      
      @remote(instance_type="{{ml.m5.xlarge}}", dependencies='./requirements.txt')
      def divide(x, y):
          return x / y
      
      divide(2, 3.0)
      ```

      추가 코드 예제는 샘플 노트북 [quick\_start.ipnyb](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-remote-function/quick_start/quick_start.ipynb)를 참조하세요.

### 로컬 IDE 내에서 코드를 실행합니다.
<a name="train-remote-decorator-env-ide"></a>

선호하는 로컬 IDE 내에서 @remote 데코레이터를 사용하여 로컬 ML 코드에 주석을 달 수 있습니다. 다음 단계에서는 필수 사전 조건, Python SDK를 설치하는 방법, @remote 데코레이터로 코드에 주석을 다는 방법을 보여줍니다.

1. 다음과 같이 AWS Command Line Interface (AWS CLI)를 설정하고 역할을 생성하여 사전 조건을 설치합니다.
   + [Amazon SageMaker AI 사전 조건 설정](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-set-up.html#gs-cli-prereq)의 **AWS CLI 사전 조건** 섹션 지침에 따라 SageMaker AI 도메인에 온보딩합니다.
   + [SageMaker AI 역할](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)의 **실행 역할 생성** 섹션에 따라 IAM 역할을 생성합니다.

1. PyCharm 또는 `conda`를 사용하거나 Python 버전 3.7 이상(최대 3.10.x)을 사용하여 가상 환경을 만듭니다.
   + 다음과 같이 PyCharm을 사용하여 가상 환경을 설정합니다.

     1. 기본 메뉴에서 **파일**을 선택합니다.

     1. **새 프로젝트**를 선택합니다.

     1. **새 환경 사용** 아래의 아래쪽 화살표에서 **Conda**를 선택합니다.

     1. **Python 버전** 필드에서 아래쪽 화살표를 사용하여 3.7 이상의 Python 버전을 선택합니다. 목록에 최대 3.10.x까지 있습니다.  
![Python의 새로운 환경은 Conda로 선택하고 Python 버전은 3.10으로 선택했습니다.](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/training-pycharm-ide.png)
   + Anaconda가 설치되어 있는 경우 다음과 같이 `conda`를 사용하여 가상 환경을 설정할 수 있습니다.
     + Anaconda 프롬프트 터미널 인터페이스를 엽니다.
     + Python 버전 3.7 이상(최대 3.10x)을 사용하여 새 `conda` 환경을 만들고 활성화합니다. 다음 코드 예제에서는 Python 버전 3.10을 사용하여 `conda` 환경을 생성하는 방법을 보여줍니다.

       ```
       conda create -n {{sagemaker_jobs_quick_start}} python=3.10 pip
       conda activate {{sagemaker_jobs_quick_start}}
       ```

1. SageMaker Python SDK를 설치합니다.

   선호하는 IDE에서 코드를 패키징하려면 Python 3.7 이상(최대 3.10x)을 사용하여 가상 환경을 설정해야 합니다. 호환되는 컨테이너 이미지도 필요합니다. 다음 코드 예제를 사용하여 SageMaker Python SDK를 설치합니다.

   ```
   pip install sagemaker
   ```

1. @remote 데코레이터 내부에 코드를 래핑합니다. SageMaker Python SDK는 코드 함수를 자동으로 해석하여 이를 SageMaker 훈련 작업으로 실행합니다. 다음 코드 예제에서는 필요한 라이브러리를 가져오고 SageMaker 세션을 설정하며 @remote 데코레이터로 함수에 주석을 다는 방법을 보여줍니다.

   필요한 종속성을 직접 제공하거나 활성 `conda` 환경의 종속성을 사용하여 코드를 실행할 수 있습니다.
   + 종속성을 직접 제공하려면 다음을 수행합니다.
     + 코드가 있는 작업 디렉터리에 `requirements.txt` 파일을 생성합니다.
     + SageMaker 라이브러리와 함께 코드에 필요한 모든 종속성을 추가합니다. 다음 섹션은 예제 `divide` 함수에서 `requirements.txt`의 최소 코드 예제를 제공합니다.

       ```
       sagemaker
       ```
     + 종속 파일을 전달하여 @remote 데코레이터로 코드를 실행합니다. 다음 코드 예제에서 `The IAM role name`은 SageMaker에서 작업을 실행하는 데 사용하려는 AWS Identity and Access Management (IAM) 역할 ARN으로 바꿉니다.

       ```
       import boto3
       import sagemaker
       from sagemaker.remote_function import remote
       
       sm_session = sagemaker.Session(boto_session=boto3.session.Session(region_name="{{us-west-2}}"))
       settings = dict(
           sagemaker_session=sm_session,
           role={{<The IAM role name>}},
           instance_type="{{ml.m5.xlarge}}",
           dependencies='./requirements.txt'
       )
       
       @remote(**settings)
       def divide(x, y):
           return x / y
       
       
       if __name__ == "__main__":
           print(divide(2, 3.0))
       ```
   + 활성 `conda` 환경의 종속성을 사용하려면 다음과 같이 `dependencies` 파라미터 `auto_capture` 값을 사용합니다.

     ```
     import boto3
     import sagemaker
     from sagemaker.remote_function import remote
     
     sm_session = sagemaker.Session(boto_session=boto3.session.Session(region_name="{{us-west-2}}"))
     settings = dict(
         sagemaker_session=sm_session,
         role={{<The IAM role name>}},
         instance_type="{{ml.m5.xlarge}}",
         dependencies="auto_capture"
     )
     
     @remote(**settings)
     def divide(x, y):
         return x / y
     
     
     if __name__ == "__main__":
         print(divide(2, 3.0))
     ```
**참고**  
Jupyter notebook 내부에 이전 코드를 구현할 수도 있습니다. PyCharm Professional 에디션은 Jupyter를 기본적으로 지원합니다. 자세한 지침은 PyCharm 설명서의 [Jupyter notebook 지원](https://www.jetbrains.com/help/pycharm/ipython-notebook-support.html)을 참조하세요.