

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

# Amazon SageMaker Studio에서 로컬 모드 지원
<a name="studio-updated-local"></a>

**중요**  
Amazon SageMaker Studio 또는 Amazon SageMaker Studio Classic에서 Amazon SageMaker 리소스를 생성할 수 있도록 허용하는 사용자 지정 IAM 정책도 해당 리소스에 태그를 추가할 수 있는 권한을 부여해야 합니다. Studio와 Studio Classic은 만드는 리소스에 태그를 자동으로 지정하기 때문에 리소스에 태그를 추가할 권한이 필요합니다. IAM 정책이 Studio 및 Studio Classic에서 리소스를 만들도록 허용하지만 태그 지정은 허용하지 않는 경우 리소스 만들기를 시도할 때 'AccessDenied' 오류가 발생할 수 있습니다. 자세한 내용은 [SageMaker AI 리소스 태그 지정을 위한 권한 제공](security_iam_id-based-policy-examples.md#grant-tagging-permissions) 섹션을 참조하세요.  
[AWS Amazon SageMaker AI에 대한 관리형 정책](security-iam-awsmanpol.md)는 SageMaker 리소스를 생성할 수 있는 권한을 부여합니다. 여기에는 해당 리소스를 생성하는 동안 태그를 추가할 수 있는 권한이 이미 포함되어 있습니다.

Amazon SageMaker Studio 애플리케이션은 로컬 모드를 사용하여 추정기, 프로세서 및 파이프라인을 생성한 다음 로컬 환경에 배포할 수 있도록 지원합니다. 로컬 모드를 사용하면 Amazon SageMaker AI 관리형 훈련 또는 호스팅 환경에서 실행하기 전에 기계 학습 스크립트를 테스트할 수 있습니다. Studio는 다음 애플리케이션에서 로컬 모드를 지원합니다.
+ Amazon SageMaker Studio Classic
+ JupyterLab
+ 코드 편집기, Code-OSS 기반, Visual Studio 코드 - 오픈 소스

Studio 애플리케이션의 로컬 모드는 SageMaker Python SDK를 사용하여 호출됩니다. Studio 애플리케이션에서 로컬 모드는 Amazon SageMaker 노트북 인스턴스에서 작동하는 방식과 비슷하게 작동하며 몇 가지 차이점이 있습니다. [루트리스 Docker 구성](studio-updated-local-get-started.md#studio-updated-local-rootless)을 활성화하면 온프레미스 리포지토리 및 퍼블릭 레지스트리를 포함하여 VPC 구성을 통해 추가 Docker 레지스트리에도 액세스할 수 있습니다. SageMaker Python SDK로 로컬 모델을 사용하는 방법에 대한 자세한 내용은 [로컬 모드](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode) 섹션을 참조하세요.

**참고**  
Studio 애플리케이션은 로컬 모드에서 다중 컨테이너 작업을 지원하지 않습니다. 로컬 모드 작업은 훈련, 추론 및 처리 작업을 위한 단일 인스턴스로 제한됩니다. 로컬 모드 작업을 생성할 때 인스턴스 수 구성은 `1`여야 합니다. 

## Docker 지원
<a name="studio-updated-local-docker"></a>

로컬 모드 지원의 일환으로 Studio 애플리케이션은 제한된 Docker 액세스 기능을 지원합니다. 이 지원을 통해 사용자는 Jupyter 노트북의 Docker API 또는 애플리케이션의 이미지 터미널과 상호 작용할 수 있습니다. 고객은 다음 중 하나를 사용하여 Docker와 상호 작용할 수 있습니다.
+ [Docker CLI](https://docs.docker.com/engine/reference/run/)
+ [Docker Compose CLI](https://docs.docker.com/compose/reference/)
+ 언어별 Docker SDK 클라이언트

Studio는 다음 제한이 있는 제한된 Docker 액세스 기능도 지원합니다.
+ Docker 네트워크 사용은 지원되지 않습니다.
+ 컨테이너 실행 중에는 Docker [볼륨](https://docs.docker.com/storage/volumes/) 사용량이 지원되지 않습니다. 컨테이너 오케스트레이션 중에는 볼륨 바인드 탑재 입력만 허용됩니다. 볼륨 바인드 탑재 입력은 Studio Classic용 Amazon Elastic File System(Amazon EFS) 볼륨에 있어야 합니다. JupyterLab 및 코드 편집기 애플리케이션의 경우 Amazon Elastic Block Store(Amazon EBS) 볼륨에 있어야 합니다.
+ 컨테이너 검사 작업은 허용됩니다.
+ 컨테이너 포트와 호스트 매핑은 허용되지 않습니다. 그러나 호스팅할 포트를 지정할 수 있습니다. 그런 다음 다음 URL을 사용하여 Studio에서 엔드포인트에 액세스할 수 있습니다.

  ```
  http://localhost:port
  ```

### 지원되는 Docker 작업
<a name="studio-updated-local-docker-supported"></a>

다음 표에는 지원 제한을 포함하여 Studio에서 지원되는 모든 Docker API 엔드포인트가 나열되어 있습니다. API 엔드포인트가 테이블에 누락된 경우 Studio는 이를 지원하지 않습니다.


|  API 설명서  |  제한 사항  | 
| --- | --- | 
|  [SystemAuth](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemAuth)  |   | 
|  [SystemEvents](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemEvents)  |   | 
|  [SystemVersion](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemVersion)  |   | 
|  [SystemPing](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemPing)  |   | 
|  [SystemPingHead](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemPingHead)  |   | 
|  [ContainerCreate](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerCreate)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/studio-updated-local.html)  | 
|  [ContainerStart](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerStart)  |   | 
|  [ContainerStop](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerStop)  |   | 
|  [ContainerKill](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerKill)  |   | 
|  [ContainerDelete](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerDelete)  |   | 
|  [ContainerList](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerList)  |   | 
|  [ContainerLogs](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerLogs)  |   | 
|  [ContainerInspect](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect)  |   | 
|  [ContainerWait](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerWait)  |   | 
|  [ContainerAttach](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerAttach)  |   | 
|  [ContainerPrune](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerPrune)  |   | 
|  [ContainerResize](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerResize)  |   | 
|  [ImageCreate](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageCreate)  |  VPC-only 모드 지원은 허용 목록에 있는 계정의 Amazon ECR 이미지로 제한됩니다. [루트리스 Docker 구성](studio-updated-local-get-started.md#studio-updated-local-rootless)을 활성화하면 온프레미스 리포지토리 및 퍼블릭 레지스트리를 포함하여 VPC 구성을 통해 추가 Docker 레지스트리에도 액세스할 수 있습니다. | 
|  [ImagePrune](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImagePrune)  |   | 
|  [ImagePush](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImagePush)  |  VPC-only 모드 지원은 허용 목록에 있는 계정의 Amazon ECR 이미지로 제한됩니다. [루트리스 Docker 구성](studio-updated-local-get-started.md#studio-updated-local-rootless)을 활성화하면 온프레미스 리포지토리 및 퍼블릭 레지스트리를 포함하여 VPC 구성을 통해 추가 Docker 레지스트리에도 액세스할 수 있습니다. | 
|  [ImageList](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageList)  |   | 
|  [ImageInspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect)  |   | 
|  [ImageGet](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageGet)  |   | 
|  [ImageDelete](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageDelete)  |   | 
|  [ImageBuild](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageBuild)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/studio-updated-local.html)  | 

**Topics**
+ [Docker 지원](#studio-updated-local-docker)
+ [로컬 모드 시작하기](studio-updated-local-get-started.md)

# 로컬 모드 시작하기
<a name="studio-updated-local-get-started"></a>

다음 섹션에서는 Amazon SageMaker Studio에서 로컬 모드를 시작하는 데 필요한 단계를 간략하게 설명합니다.
+ 사전 조건 완료
+ `EnableDockerAccess` 설정
+ Docker 설치

## 사전 조건
<a name="studio-updated-local-prereq"></a>

Studio 애플리케이션에서 로컬 모드를 사용하려면 다음 사전 조건을 완료하세요.
+ Amazon Elastic Container Registry 리포지토리에서 이미지를 가져오려면 Amazon ECR 이미지를 호스팅하는 계정이 사용자의 실행 역할에 대한 액세스 권한을 제공해야 합니다. 도메인의 실행 역할도 Amazon ECR 액세스를 허용해야 합니다.
+ 다음 명령을 사용하여 Studio Python SDK의 최신 버전을 사용하고 있는지 확인합니다. 

  ```
  pip install -U sagemaker
  ```
+ 로컬 모드 및 Docker 기능을 사용하려면 AWS Command Line Interface (AWS CLI)를 사용하여 도메인 `DockerSettings`의 다음 파라미터를 설정합니다. 

  ```
  EnableDockerAccess : ENABLED
  ```
+ `EnableDockerAccess`를 사용하면 도메인의 사용자가 로컬 모드를 사용할 수 있는지 여부를 제어할 수도 있습니다. 기본적으로 Studio 애플리케이션에서는 로컬 모드와 Docker 기능이 허용되지 않습니다. 자세한 내용은 [`EnableDockerAccess` 설정](#studio-updated-local-enable) 섹션을 참조하세요.
+ [Docker 설치](#studio-updated-local-docker-installation)의 단계에 따라 Studio 애플리케이션에 Docker CLI를 설치합니다.
+ [루트리스 Docker 구성](#studio-updated-local-rootless)의 경우 VPC에 원하는 Docker 레지스트리에 적합한 엔드포인트 및 라우팅이 구성되어 있는지 확인합니다.

## `EnableDockerAccess` 설정
<a name="studio-updated-local-enable"></a>

다음 섹션에서는 도메인에 퍼블릭 인터넷 액세스가 있거나 `VPC-only` 모드인 경우 `EnableDockerAccess`를 설정하는 방법을 보여줍니다.

**참고**  
`EnableDockerAccess`에 대한 변경 사항은 도메인이 업데이트된 후 생성된 애플리케이션에만 적용됩니다. 도메인을 업데이트한 후 새 애플리케이션을 생성해야 합니다.

**퍼블릭 인터넷 액세스**

다음 예제 명령은 새 도메인을 생성하거나 퍼블릭 인터넷 액세스로 기존 도메인을 업데이트할 때 `EnableDockerAccess`를 설정하는 방법을 보여줍니다.

```
# create new domain
aws --region region \
    sagemaker create-domain --domain-name domain-name \
    --vpc-id vpc-id \
    --subnet-ids subnet-ids \
    --auth-mode IAM \
    --default-user-settings "ExecutionRole=execution-role" \
    --domain-settings '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}' \
    --query DomainArn \
    --output text

# update domain
aws --region region \
    sagemaker update-domain --domain-id domain-id \
    --domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}'
```

**`VPC-only` 모드**

`VPC-only` 모드에서 도메인을 사용하는 경우 Docker 이미지 푸시 및 풀 요청은 고객이 구성한 VPC 대신 서비스 VPC를 통해 라우팅됩니다. 이 기능으로 인해 관리자는 사용자가 Amazon ECR Docker 풀 앤 푸시 작업 요청을 할 수 있는 신뢰할 수 있는 AWS 계정 목록을 구성할 수 있습니다.

신뢰할 수 Docker AWS 계정 있는 목록에 없는에 이미지 푸시 또는 풀 요청이 이루어진 경우 AWS 계정요청이 실패합니다. Amazon Elastic Container Registry(Amazon ECR) 외부의 Docker 풀 및 푸시 작업은 `VPC-only` 모드에서 지원되지 않습니다.

기본적으로 신뢰할 수 있는 항목은 다음과 AWS 계정 같습니다.
+ SageMaker AI 도메인을 호스팅하는 계정
+ 다음 SageMaker 이미지를 호스팅하는 SageMaker AI 계정:
  + DLC 프레임워크 이미지
  + Sklearn, Spark, XGBoost 처리 이미지

신뢰할 수 있는 추가 목록을 구성하려면 다음과 같이 `VpcOnlyTrustedAccounts` 값을 AWS 계정지정합니다.

```
aws --region region \
    sagemaker update-domain --domain-id domain-id \
    --domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED", "VpcOnlyTrustedAccounts": ["account-list"]}}'
```

**참고**  
[루트리스 Docker 구성](#studio-updated-local-rootless)이 활성화되면 `VpcOnlyTrustedAccounts`가 무시되고 Docker 트래픽이 VPC 구성을 통해 라우팅되므로 VPC가 도달할 수 있는 모든 레지스트리에 액세스할 수 있습니다.

## 루트리스 Docker 구성
<a name="studio-updated-local-rootless"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DockerSettings.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DockerSettings.html)가 활성화되면 Studio는 VPC를 통해 트래픽을 라우팅하는 [루트리스 Docker 대몬](https://docs.docker.com/engine/security/rootless/)을 사용합니다. 이를 통해 보안이 강화되고 추가 Docker 레지스트리에 액세스할 수 있습니다. `RootlessDocker`와의 주요 차이점은 다음과 같습니다.
+ 컨테이너 포트는 localhost 대신 Docker 게이트웨이 IP(`172.17.0.1`)를 사용하여 액세스할 수 있습니다.
+ VPC 구성은 Docker 작업에 액세스할 수 있는 레지스트리를 결정합니다. `VpcOnlyTrustedAccounts`는 무시되고 Docker 트래픽은 VPC 구성을 통해 라우팅됩니다.

루트리스 Docker를 사용하려면 `ENABLED`에서 `EnableDockerAccess` 및 `RootlessDocker`를 모두 `DockerSettings`로 설정해야 합니다. 예를 들어 위 [`EnableDockerAccess` 설정](#studio-updated-local-enable) 예시에서 다음을 포함하도록 도메인 설정을 수정할 수 있습니다.

```
'{"DockerSettings": {"EnableDockerAccess": "ENABLED", "RootlessDocker": "ENABLED"}}'
```

## Docker 설치
<a name="studio-updated-local-docker-installation"></a>

Docker를 사용하려면 Studio 애플리케이션의 터미널에서 Docker를 수동으로 설치해야 합니다. 도메인에 인터넷에 대한 액세스 권한이 있는지 여부는 Docker 설치 단계가 다릅니다.

### 인터넷 액세스
<a name="studio-updated-local-docker-installation-internet"></a>

도메인이 퍼블릭 인터넷 액세스로 생성되거나 인터넷 액세스가 제한된 `VPC-only` 모드에서 생성되는 경우 다음 단계에 따라 Docker를 설치합니다.

1. (선택 사항) 도메인이 인터넷 액세스가 제한된 `VPC-only` 모드에서 생성되는 경우 Docker 웹 사이트에 액세스할 수 있는 퍼블릭 NAT 게이트웨이를 생성합니다. 지침은 [NAT 게이트웨이](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)를 참조하세요.

1. Docker를 설치하려는 Studio 애플리케이션의 터미널로 이동합니다.

1. 애플리케이션의 운영 체제를 반환하려면 터미널에서 다음 명령을 실행합니다.

   ```
   cat /etc/os-release
   ```

1. [Amazon SageMaker AI Local Mode 예시 리포지토리](https://github.com/aws-samples/amazon-sagemaker-local-mode/tree/main/sagemaker_studio_docker_cli_install)에서 애플리케이션의 운영 체제에 대한 지침에 따라 Docker를 설치합니다.

   예를 들어 다음 고려 사항을 고려하여 [https://github.com/aws-samples/amazon-sagemaker-local-mode/blob/main/sagemaker\$1studio\$1docker\$1cli\$1install/sagemaker-ubuntu-focal-docker-cli-install.sh](https://github.com/aws-samples/amazon-sagemaker-local-mode/blob/main/sagemaker_studio_docker_cli_install/sagemaker-ubuntu-focal-docker-cli-install.sh) 스크립트를 따라 Ubuntu에 Docker를 설치합니다.
   + 연결된 명령이 실패하면 명령을 한 번에 하나씩 실행합니다.
   + Studio는 Docker 버전 `20.10.X.` 및 Docker Engine API 버전 `1.41`만 지원합니다.
   + 다음 패키지는 Studio에서 Docker CLI를 사용하는 데 필요하지 않으며 설치를 건너뛸 수 있습니다.
     + `containerd.io`
     + `docker-ce`
     + `docker-buildx-plugin`
**참고**  
애플리케이션에서 Docker 서비스를 시작할 필요가 없습니다. Studio 애플리케이션을 호스팅하는 인스턴스는 기본적으로 Docker 서비스를 실행합니다. 모든 Docker API 호출은 Docker 서비스를 통해 자동으로 라우팅됩니다.

1. Studio 애플리케이션 내에서 Docker 상호 작용에 노출된 Docker 소켓을 사용합니다. 기본적으로 다음 소켓이 노출됩니다.

   ```
   unix:///docker/proxy.sock
   ```

   기본값 `USER`에 대한 다음 Studio 애플리케이션 환경 변수는 이 노출된 소켓을 사용합니다.

   ```
   DOCKER_HOST
   ```

### 인터넷 액세스 없음
<a name="studio-updated-local-docker-installation-no-internet"></a>

인터넷 액세스가 없는 `VPC-only` 모드에서 도메인이 생성된 경우 다음 단계에 따라 Docker를 설치합니다.

1. Docker를 설치하려는 Studio 애플리케이션의 터미널로 이동합니다.

1. 터미널에서 다음 명령을 실행하여 애플리케이션의 운영 체제를 반환합니다.

   ```
   cat /etc/os-release
   ```

1. Docker `.deb` 파일을 로컬 시스템에 다운로드합니다. Studio 애플리케이션의 운영 체제에 필요한 파일을 다운로드하는 방법에 대한 지침은 [Docker Engine 설치](https://docs.docker.com/engine/install/)를 참조하세요.

   예를 들어 다음 사항을 고려하여 [패키지에서 설치](https://docs.docker.com/engine/install/ubuntu/#install-from-a-package)의 1\$14단계에 따라 Ubuntu의 패키지에서 Docker를 설치합니다.
   + 패키지에서 Docker를 설치합니다. 다른 방법을 사용하여 Docker를 설치하면 실패합니다.
   + Docker 버전 `20.10.X`에 해당하는 최신 패키지를 설치합니다.
   + 다음 패키지는 Studio에서 Docker CLI를 사용하는 데 필요하지 않습니다. 다음을 설치할 필요가 없습니다.
     + `containerd.io`
     + `docker-ce`
     + `docker-buildx-plugin`
**참고**  
애플리케이션에서 Docker 서비스를 시작할 필요가 없습니다. Studio 애플리케이션을 호스팅하는 인스턴스는 기본적으로 Docker 서비스를 실행합니다. 모든 Docker API 호출은 Docker 서비스를 통해 자동으로 라우팅됩니다.

1. Amazon EFS 파일 시스템 또는 애플리케이션의 Amazon EBS 파일 시스템에 `.deb` 파일을 업로드합니다.

1. Studio 애플리케이션 터미널에서 `docker-ce-cli` 및 `docker-compose-plugin` `.deb` 패키지를 수동으로 설치합니다. 자세한 내용과 지침은 Docker 문서 웹사이트의 [패키지에서 설치](https://docs.docker.com/engine/install/ubuntu/#install-from-a-package)의 5단계를 참조하세요.

1. Studio 애플리케이션 내에서 Docker 상호 작용에 노출된 Docker 소켓을 사용합니다. 기본적으로 다음 소켓이 노출됩니다.

   ```
   unix:///docker/proxy.sock
   ```

   기본값 `USER`에 대한 다음 Studio 애플리케이션 환경 변수는 이 노출된 소켓을 사용합니다.

   ```
   DOCKER_HOST
   ```