기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SageMaker HyperPod의 Slurm 클러스터에서 사용자 생성
SageMaker HyperPod의 Slurm 클러스터 노드에서 POSIX 사용자를 생성하는 세 가지 방법이 있습니다. 이는 사용자가 생성되는 시기와 관리해야 하는 수명 주기 구성의 양에 따라 다릅니다. 여기에 나열된 클러스터 및 워크플로와 일치하는 옵션을 가장 쉬운 옵션에서 가장 고급 옵션까지 선택합니다.
| 옵션 | 최적의 용도 | 수명 주기 구성 필요 | 사용자가 생성되는 경우 | 스케일 업 또는 노드 교체 시 동작 |
|---|---|---|---|---|
| 옵션 A: 사용자 생성 유틸리티 스크립트를 사용하여 사용자 추가 | 수명 주기 구성을 터치하지 않고 이미 InService 상태인 클러스터에 사용자 추가 | 없음 | 스크립트를 실행할 때마다 온디맨드 | 수동. 사용자는 자동으로 적용되지 않습니다. 노드가 추가되거나 교체될 때마다(자동 또는 수동으로) 스크립트를 다시 실행합니다. |
| 옵션 B: add-users 확장 스크립트를 사용하여 사용자 추가 | 사용자를 자동으로 프로비저닝하는 AMI 기반 수명 주기 구성 클러스터 | 사용자 확장 스크립트 추가 | 노드 프로비저닝 중 자동으로 - 클러스터 생성 중 노드 추가(스케일 업), AMI 업데이트, 노드 교체. | 자동. 확장은 프로비저닝 중에 수명 주기 스크립트 Amazon S3 버킷의 사용자 파일을 사용하여 각 새 노드에서 실행됩니다. |
| 옵션 C: 기본 수명 주기 스크립트를 사용하여 사용자 추가 | 이미 전체 사용자 지정 기본 수명 주기 스크립트 세트를 사용하는 클러스터 | 전체 사용자 지정 수명 주기 스크립트 세트 | 노드 프로비저닝 중 자동으로 - 클러스터 생성 중 노드 추가(스케일 업), AMI 업데이트, 노드 교체. | 자동. 기본 수명 주기 스크립트는 프로비저닝 중에 수명 주기 스크립트 Amazon S3 버킷의 사용자 파일을 사용하여 각 새 노드에서 실행됩니다. |
세 가지 옵션 모두 SageMaker HyperPod 서비스 팀이 GitHub 웹 사이트의 Awsome 분산 훈련
주제
옵션 A: 사용자 생성 유틸리티 스크립트를 사용하여 사용자 추가
가장 간단한 옵션이며 수명 주기 구성이 필요하지 않습니다. 클러스터가 이미 InService 상태이고 지금 바로 사용자를 추가하려는 경우 사용합니다. 컨트롤러 노드의 GitHub 웹 사이트에서 create_users.sh
-
명령줄 모드 - 사용자 이름을 인수로 전달하고 스크립트가 UIDs. 이는 사용자를 추가하는 가장 빠른 방법입니다.
-
파일 모드 - 스크립트는 현재 디렉터리의
shared_users.txt(CSV) 또는shared_users.yaml(YAML) 파일에서 사용자 정의를 읽습니다. -
대화형 모드 - 스크립트에 사용자 이름과 선택적으로 UIDs 입력하라는 메시지가 표시됩니다.
중요
모든 모드에서는 실행 시 존재하는 노드에만 사용자를 create_users.sh 생성합니다. 여기에는 로컬 shared_users.txt 또는를 사용하는 파일 모드가 포함됩니다shared_users.yaml. 나중에 스케일 업 또는 노드 교체로 추가된 노드에서는 사용자가 자동으로 다시 생성되지 않습니다. 이는 새 노드가 POSIX 계정이 없는 새 루트 볼륨으로 부팅되는 프로비저닝 이벤트입니다. (공유 파일 시스템의 홈 디렉터리 및 SSH 키는 유지되지만 사용자 계정 자체는 유지되지 않습니다.) 새 노드를 추가한 create_users.sh 후 다시 실행하여 줄 바꿈합니다.
스크립트를 다시 실행하는 것은 안전합니다. 컨트롤러 노드에서 실행합니다. 한 번의 실행으로 다른 클러스터 노드를 검색하고 전체 클러스터에 사용자를 적용합니다. 노드당 멱등성: 누락된 경우에만 사용자를 생성하여 이미 사용자를 변경하지 않은 상태로 둡니다. 따라서 노드를 추가한 후 다시 실행하면 새 노드에만 영향을 줍니다.
새 노드가 사용자를 자동으로 수신하도록 하려면 사용자 파일이 클러스터의 수명 주기 구성의 일부여야 프로비저닝 중에 실행됩니다. 즉, 수명 주기 스크립트 Amazon S3 버킷에 shared_users.txt 또는 shared_users.yaml 파일을 저장하고 옵션 B: add-users 확장 스크립트를 사용하여 사용자 추가 또는와 함께 사용합니다옵션 C: 기본 수명 주기 스크립트를 사용하여 사용자 추가. create_users.sh는 생성한 모든 사용자를에 추가shared_users.txt하고 Amazon S3에 업로드하도록 제안하지만 모든 모드에서는 사용자가 프로비저닝 이벤트 전반에 걸쳐 유지되지 않도록 합니다.
각 사용자에 대해 스크립트는 다음과 같습니다.
-
모든 노드에서 일관된 UID를 가진 POSIX 사용자를 생성합니다.
-
공유 파일 시스템에 홈 디렉터리를 생성합니다(에서 OpenZFS 자동 감지
/home또는에서 Amazon FSx for Lustre 자동 감지/fsx). -
암호 없는 노드 간 SSH를 위해 공유 파일 시스템에서 SSH 키 페어를 생성합니다.
-
docker그룹에 사용자를 추가합니다(및 선택적으로 sudo 액세스 권한 부여). -
사용자가 작업을 제출할 수 있도록 컨트롤러에서 Slurm 회계에 사용자를 등록합니다.
-
새 사용자를
shared_users.txt파일에 추가하고 선택적으로 Amazon S3에 업로드하므로 다른 옵션과 함께 재사용할 수 있습니다.
사전 조건
시작하기 전에 다음 요구 사항이 충족되는지 확인합니다.
-
클러스터는 InService이며 컨트롤러 노드에 연결할 수 있습니다. SageMaker HyperPod 클러스터 노드에 액세스을(를) 참조하세요.
-
jq는 컨트롤러 노드에 설치됩니다. -
SSH 액세스는 컨트롤러 노드에서 다른 모든 노드로 사용할 수 있습니다(HyperPod는 기본 사용자에 대해 이를 구성함).
create_users.sh 유틸리티 스크립트를 사용하여 사용자를 추가하려면
다음 단계를 완료합니다.
-
컨트롤러 노드에 연결하고 스크립트를 다운로드합니다. sudo 권한으로 실행해야 합니다.
$curl -O https://raw.githubusercontent.com/awslabs/awsome-distributed-training/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/utils/create_users.sh chmod +x create_users.sh -
전달하는 인수와 현재 디렉터리의 파일 중에서 우선적으로 선택하는 세 가지 모드 중 하나를 사용하여 스크립트를 실행합니다. 명령줄 인수를 먼저 선택한 다음 사용자 파일을 실행하고 대화형 프롬프트를 실행합니다. 모든 모드는 동일한 순서로 실행됩니다. 즉, 현재 노드에서 사용자를 생성하고, 공유 파일 시스템에서 SSH 키 페어를 설정하고, 나머지 모든 노드(병렬로 노드 계산)에서 사용자를 생성하고, 컨트롤러에서 Slurm 회계에 사용자를 등록하고,에 추가하고
shared_users.txt, 해당 파일을 Amazon S3에 업로드하도록 제안합니다.다음 예제에서는 세 가지 모드에 대해 설명하며, 각각 두 명의 사용자를 추가합니다(
user1및user2).명령줄 모드
사용자 이름을 인수로 전달합니다. 스크립트는 UIDs 자동으로 할당하고 새 사용자가 sudoer여야 하는지 여부를 묻는 메시지를 표시합니다. 이는 사용자를 추가하는 가장 빠른 방법입니다.
$sudo ./create_users.sh user1 user2스크립트는 사용자 이름을 검증한 다음 sudoer 액세스를 요청합니다.
======================================== Step 1: User Configuration ======================================== Users from CLI args: user1 user2 ✓ user1 — will be created (auto-assign UID) ✓ user2 — will be created (auto-assign UID) Make these user(s) sudoer(s)? (y/N): n그런 다음 현재 노드에서 사용자를 생성하고, SSH 키 페어를 설정하고, 컴퓨팅 노드에서 사용자를 생성하고, 컨트롤러에서 Slurm 회계에 등록하고,를 작성하여 해당 파일을 Amazon S3에 업로드하라는
shared_users.txt메시지를 표시합니다.파일 모드
스크립트와 동일한 디렉터리에 사용자 파일을 생성한 다음 인수 없이 스크립트를 실행합니다. 스크립트는 사용자 정의를 읽고, 이를 검증하고(아직 존재하지 않는 사용자만 생성하고 UID 충돌을 건너뜀), 모든 노드에서 사용자를 생성합니다. 스크립트는 두 가지 파일 형식을 허용합니다.
의 경우
shared_users.txtCSV 파일을 형식의 한 줄에 한 명의 사용자와 함께 사용합니다username,uid,home_directory.user1,2001,/fsx/user1 user2,2002,/fsx/user2또는의 경우 그룹으로 구성된 간단한 사용자 목록과 함께 YAML 파일을
shared_users.yaml사용합니다. 이 형식을 구문 분석하려면 노드에 PyYAML이 필요합니다. 다음은 간단한 목록 형식입니다.users: - username: user1 uid: 2001 - username: user2 uid: 2002두 파일이 모두 있는 경우
shared_users.txt가 우선합니다. 인수 없이 스크립트를 실행합니다.$sudo ./create_users.sh스크립트는 파일 항목을 검증하고, 생성을 확인하고, sudoer 액세스를 요청하고, 파일에 없는 사용자를 추가하도록 제안합니다. 그런 다음 파일의 UIDs(2001 및 2002)를 사용하여
user2모든 노드에user1및를 생성하고, SSH 키 페어를 설정하고, Slurm 회계에 등록하고,를 업데이트합니다shared_users.txt.대화형 모드
인수와 사용자 파일이 없는 상태에서 스크립트를 실행합니다. 스크립트는 사용자 이름과 선택적으로 할당할 UIDs를 입력하라는 메시지를 표시합니다.
$sudo ./create_users.sh======================================== Step 1: User Configuration ======================================== No shared_users.txt or shared_users.yaml found. Entering interactive mode... Enter username(s), comma-separated (e.g. 'sean' or 'sean,alice,bob'): user1,user2 Specify UIDs? (Enter for auto-assign, or comma-separated UIDs): 2001,2002 Make these user(s) sudoer(s)? (y/N): n프롬프트에 응답하면 스크립트는 입력한 UIDs가 있는 모든 노드
user2에user1및를 생성하고, SSH 키 페어를 설정하고, Slurm 회계에 등록하고,를 업데이트합니다shared_users.txt. -
클러스터에서 사용자로 전환하고 명령을 실행하여 사용자를 테스트합니다.
$sudo su - user1 && ssh $(srun hostname)
참고
스크립트는 멱등성입니다. 이미 존재하는 사용자는 건너뛰고 기존 SSH 키와 Slurm 회계 연결이 그대로 유지되므로 다시 실행하는 것이 안전합니다.
옵션 B: add-users 확장 스크립트를 사용하여 사용자 추가
클러스터가 AMI 기반 구성을 사용하고 사용자를 자동으로 프로비저닝하려는 경우이 옵션을 사용합니다. 확장 수명 주기 옵션을 사용하면 SageMaker HyperPod가 먼저 전체 AMI 기반 구성을 실행한 다음 확장 스크립트를 실행합니다. 서비스 팀은 GitHub 웹 사이트의 Awsome 분산 훈련 리포지토리의 확장 폴더에 ready-to-use 수 있는 추가 사용자
확장 설정에 대한 자세한 내용은 다음을 참조하세요.
-
AWS 콘솔을 사용하여 확장을 설정하려면 사용자 지정 설정의 수명 주기 구성 - 선택 사항을 참조하세요.
-
API를 사용하여 확장을 설정하려면 클러스터 생성의 옵션 B: OnInitComplete를 사용하여 AMI 기반 구성 확장을 참조하세요. https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html#smcluster-getting-started-slurm-cli-create-cluster
add-users 확장은 일관된 UIDs 사용하여 POSIX 사용자를 생성하고, 공유 파일 시스템에 홈 디렉터리를 설정하고, 암호 없는 노드 간 SSH에 대한 SSH 키 페어를 생성하고, 컨트롤러에서 Slurm 회계에 사용자를 등록합니다. 다음 두 가지 입력 형식을 허용합니다.
-
shared_users.txt- 기본 수명 주기 스크립트()에서 사용하는 것과 동일한 CSV 형식입니다username,uid,/fsx/username. 모든 사용자가rootSlurm 계정에 추가됩니다. -
shared_users.yaml- 그룹별 Slurm 계정 및 파일 시스템 탑재를 사용하여 사용자를 그룹으로 구성할 수 있도록 추가로 지원하는 YAML 형식입니다. 그룹은 조직 전용이며 Linux 그룹을 생성하지 않습니다.
다음은 그룹 형식을 shared_users.yaml 사용하는 예제입니다.
groups: - name: research slurm_account: research users: - username: user1 uid: 2001 - username: user2 uid: 2002 - name: platform slurm_account: platform users: - username: user3 uid: 3001
클러스터 생성 시 add-users 확장을 사용하여 사용자를 추가하려면
다음 단계를 완료합니다.
-
add-users디렉터리에 적절한 샘플 파일을 복사하여 사용자와 함께 편집합니다.$cp shared_users_sample.yaml shared_users.yaml -
수명 주기 스크립트 Amazon S3 버킷에
add-users디렉터리를 업로드합니다(버킷 경로는 로 시작해야 함s3://sagemaker-).$aws s3 cp add-users/ s3://DOC-EXAMPLE-BUCKET/add-users/ --recursive -
를
OnInitComplete스크립트add_users.sh로 사용하여CreateCluster요청LifeCycleConfig블록에 확장을 지정합니다."LifeCycleConfig": { "OnInitComplete": "add_users.sh", "SourceS3Uri": "s3://DOC-EXAMPLE-BUCKET/add-users/" }
작은 정보
클러스터에 사용자 생성 외에 여러 기능(예: 관찰성)이 필요한 경우 전체 익스텐션 폴더를 업로드하고 run_extensions.sh 오케스트레이터를 익스텐션 스크립트로 사용합니다. 와 같은 간단한 부울 토글ENABLE_ADD_USERS="true"을 제공하여 각 기능을 활성화합니다. 자세한 내용은 를 사용하여 SageMaker HyperPod 시작하기 AWS CLI을 참조하세요.
생성 후 기존 클러스터에 사용자를 추가하려면
확장은 노드 프로비저닝 중에만 실행되므로 이미 실행 중인 노드에 사용자를 추가하려면 확장을 수동으로 실행해야 합니다.
-
새 사용자로 사용자 파일을 업데이트하고(파일의 기존 사용자 유지) Amazon S3에 업로드합니다.
$aws s3 cp add-users/shared_users.yaml s3://DOC-EXAMPLE-BUCKET/add-users/shared_users.yaml -
컨트롤러 노드에 연결하고 스크립트를 공유 파일 시스템으로 가져옵니다.
$sudo mkdir -p /fsx/cluster-scripts/add-users sudo aws s3 cp s3://DOC-EXAMPLE-BUCKET/add-users/ /fsx/cluster-scripts/add-users/ --recursive sudo chmod +x /fsx/cluster-scripts/add-users/*.sh -
컨트롤러에서 확장을 실행합니다.
$sudo bash /fsx/cluster-scripts/add-users/add_users.sh -
를 사용하여 컴퓨팅 노드에서 확장을 실행합니다
srun.$sudo srun --partition=partition-namebash /fsx/cluster-scripts/add-users/add_users.sh
스크립트는 기존 사용자를 건너뛰고 새 사용자만 생성합니다. 멱등성입니다.
옵션 C: 기본 수명 주기 스크립트를 사용하여 사용자 추가
클러스터가 이미 전체 사용자 지정 기본 수명 주기 스크립트 세트를 사용하고 스크립트가 전체 프로비저닝 시퀀스를 소유한 경우에만이 옵션을 사용합니다. 이는 단일 확장이 아닌 전체 수명 주기 스크립트 세트를 관리하기 때문에 가장 고급 옵션입니다. 서비스 팀은 GitHub 웹 사이트의 add_users.shlifecycle_script.py)는 shared_users.txt 파일을 add_users.sh읽고 사용자와 홈 디렉터리를 생성하는를 실행합니다.
이 옵션에서는 POSIX 사용자 및 홈 디렉터리 생성만 add_users.sh 처리합니다. 암호 없는 노드 간 SSH에 대한 SSH 키 페어 생성은 수명 주기 스크립트 실행기가 전체 세트의 일부로 호출하는 기본 수명 주기 스크립트 세트(예: gen-keypair-ubuntu.sh)의 별도 모듈입니다. 사용자가 공유 파일 시스템에서 키 페어를 받을 수 있도록 SSH 키 모듈이 수명 주기 스크립트 세트에 포함되어 있는지 확인합니다.
전체 사용자 지정 수명 주기 스크립트 세트 설정에 대한 자세한 내용은 다음을 참조하세요.
-
AWS 콘솔을 사용하여 수명 주기 스크립트를 설정하려면 사용자 지정 설정의 수명 주기 구성 - 선택 사항을 참조하세요.
-
API를 사용하여 수명 주기 스크립트를 설정하려면 클러스터 생성의 옵션 C: OnCreate를 사용한 전체 사용자 지정 제어를 참조하세요. https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html#smcluster-getting-started-slurm-cli-create-cluster
Slurm 클러스터 생성 중에 사용자를 생성하려면
다음 단계를 완료합니다.
-
GitHub 웹 사이트에서 기본 구성
수명 주기 스크립트 세트를 다운로드합니다. 이 옵션을 사용하면 전체 기본 구성 폴더를뿐만 아니라 수명 주기 스크립트 세트로 업로드할 수 있습니다 add_users.sh. -
base-config 폴더
shared_users.txt에서 다음 형식으로 라는 텍스트 파일을 생성하거나 편집합니다. 첫 번째 열은 사용자 이름이고, 두 번째 열은 고유한 사용자 ID이며, 세 번째 열은 Amazon FSx 공유 스페이스의 사용자 디렉터리입니다.username1,uid1,/fsx/username1 username2,uid2,/fsx/username2 ...add_users.sh는 동일한 폴더shared_users.txt에서 읽으므로 파일은 스크립트와 함께 기본 구성 내에 있어야 합니다. -
HyperPod 수명 주기 스크립트의 Amazon S3 버킷에 전체 기본 구성 폴더를 업로드합니다. 클러스터 생성, 클러스터 업데이트 또는 클러스터 소프트웨어 업데이트가 진행되는 동안 수명 주기 스크립트 실행기는를 실행
add_users.sh하여 사용자와 홈 디렉터리를 읽고shared_users.txt설정합니다.
참고
add_users.sh는 공유 파일 시스템을 자동으로 감지합니다. OpenZFS가 탑재되면 홈 디렉터리가 /home 생성됩니다. 그렇지 않으면 Amazon FSx for Lustre 경로를 사용합니다.