AWS 프라이빗 배포 가이드
AWS 프라이빗 배포 가이드 (EC2 및 EKS)
EC2 또는 EKS를 통해 AWS에서 Cohere 모델을 배포해 보안, 규정 준수, 제어를 강화하는 방법을 알아볼 거예요.
출처: 문서
소개 (Introduction)
이 가이드는 AWS에서 Cohere 모델을 배포하기 위한 프로덕션 준비 환경을 설정하는 과정을 안내해요.
AWS에서의 프라이빗 배포는 AWS의 안정적이고 확장 가능한 클라우드 서비스를 활용하면서 인프라와 애플리케이션에 대한 향상된 보안, 규정 준수, 제어를 제공해요.
이 가이드가 다루는 내용
이 가이드는 EC2 인스턴스와 Amazon EKS(Elastic Kubernetes Service)를 사용해 프라이빗 AWS 환경에 애플리케이션을 배포하는 방법에 대한 포괄적인 지침을 제공해요.
참고: 이 가이드는 Embed Multilingual 3 모델 배포를 예시로 사용해요. 다른 모델을 배포한다면 인스턴스 크기가 달라질 수 있어요. 자세한 내용은 영업팀에 문의하세요.
사전 요구 사항 (Prerequisites)
이 배포를 시작하기 전에 다음이 있어야 해요.
- 적절한 권한이 있는 AWS 계정
- AWS 서비스와 AWS 콘솔에 대한 기본적인 친숙함
- Linux 명령줄 작업에 대한 이해
- 컨테이너화된 애플리케이션을 배포한다면 컨테이너화 개념에 대한 지식
- 배포하려는 모델의 라이선스 ID와 모델 태그. 이를 얻으려면 Cohere 팀에 문의하세요.
AWS에서 안전하고 효율적인 프라이빗 배포를 위해 모든 컴포넌트가 제대로 구성되도록 이 가이드를 순서대로 따르세요.
EC2 인스턴스로 배포하기
Amazon Elastic Compute Cloud(EC2)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공하며 프라이빗 배포의 기반을 형성해요.
이 섹션에서는 GPU 지원 EC2 인스턴스를 적절히 시작하고, 보안 연결하고, GPU 하드웨어를 활용하는 데 필요한 NVIDIA 드라이버를 설치하는 과정을 안내할 거예요.
다음 섹션들은 EC2에 Embed Multilingual 3 모델을 배포하는 단계별 가이드를 제공해요.
EC2 인스턴스 시작하기
먼저 다음 사양으로 EC2 인스턴스를 시작하세요.
- Application and OS images - Ubuntu
- Instance Type - g5.2xlarge - 8vCPU
- Storage - 512 GB - root volume
AWS 콘솔을 사용한 SSH - 'EC2 Instance Connect' 옵션
다음으로 "EC2 Instance Connect" 옵션을 사용해 EC2 인스턴스에 연결하세요. 이를 통해 기본 사용자 이름 "ubuntu"를 사용하는 브라우저 기반 클라이언트로 인스턴스에 접근할 수 있어요. 성공적인 연결을 위해 인스턴스에 공개 IPv4 주소가 있는지 확인하세요.
Nvidia 드라이버 설치
다음으로 GPU 지원을 활성화하기 위해 EC2 인스턴스에 NVIDIA 드라이버를 설치하세요. 다음 명령을 사용해 필요한 드라이버와 NVIDIA CUDA 툴킷을 설치해요.
-
Nvidia 드라이버
sudo apt install -y ubuntu-drivers-common sudo ubuntu-drivers install sudo apt install nvidia-cuda-toolkit -
Nvidia 컨테이너 툴킷
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update sudo apt-get install -y nvidia-container-toolkit -
시스템 재부팅 드라이버를 설치하거나 큰 시스템 변경을 한 후에는 모든 컴포넌트가 제대로 초기화되고 최신 구성으로 실행되도록 재부팅이 필요한 경우가 많아요.
재부팅 전에 위 명령을 실행한 후 언급된 서비스를 다시 시작하세요.
sudo reboot -
GPU가 올바르게 설치됐는지 확인
nvidia-smi
인스턴스에 docker 설치하기
다음으로 인스턴스에 Docker를 설치하세요. 여기에는 패키지 목록 업데이트, Docker 설치, Docker 서비스 시작, 테스트 컨테이너 실행을 통한 설치 검증이 포함돼요.
sudo apt-get update
sudo apt-get install docker.io -ysudo systemctl start docker
sudo docker run hello-world
sudo systemctl enable docker
docker --version
환경 변수 정의
export CUSTOMER_TAG=proxy.replicated.com/proxy/cohere/us-docker.pkg.dev/cohere-artifacts/replicated/single-serving-embed-multilingual-03:<YOUR_MODEL_TAG>
export LICENSE_ID="<YOUR_LICENSE_ID>"
export DOCKER_CONFIG=$(mktemp -d)
cat <<EOF > "${DOCKER_CONFIG}/config.json" { "auths": { "proxy.replicated.com": {"auth": "$(echo -n "${LICENSE_ID}:${LICENSE_ID}" | base64 | tr -d '\n')"}}EOF
컨테이너 이미지 가져오기
다음으로 배포에 필요한 소프트웨어 컴포넌트를 확보해 환경을 준비하세요.
sudo docker pull $CUSTOMER_TAG
"Docker 데몬 소켓에 연결하려고 하는 동안 권한이 거부됨(permission denied while trying to connect to the Docker daemon socket at)" 오류가 발생하면 다음 명령을 실행하세요.
sudo chmod 666 /var/run/docker.sock
그런 다음 이미지가 성공적으로 가져와졌는지 확인하세요.
sudo docker images
컨테이너 시작
다음으로 Docker 컨테이너를 실행하세요. 이는 GPU 지원으로 분리(detached) 모드에서 컨테이너를 시작해요.
sudo docker run -d --rm --name embed-english --gpus=1 --net=host proxy.replicated.com/proxy/cohere/us-docker.pkg.dev/cohere-artifacts/replicated/single-serving-embed-multilingual-03:<YOUR_MODEL_TAG>
sudo docker ps
모델 호출하기
다음으로 curl 명령을 실행해 로컬 서버에 POST 요청을 보내 모델 호출을 테스트하세요. 이는 처리할 입력 데이터를 제공해 모델의 기능을 테스트해요.
curl --header "Content-Type: application/json" --request POST http://localhost:8080/embed --data-raw '{"texts": ["testing multilingual embeddings"], "input_type": "classification"}'
EKS (Elastic Kubernetes Service)로 배포하기
Amazon Elastic Kubernetes Service(EKS)는 관리형 Kubernetes 환경을 제공해 규모에 맞춰 컨테이너화된 애플리케이션을 실행할 수 있게 해 줘요. 효율적인 리소스 관리와 확장성을 위해 Kubernetes의 오케스트레이션 기능을 활용해요.
이 섹션에서는 EKS 클러스터를 설정하고, GPU 지원을 위해 구성하고, 애플리케이션을 배포하는 과정을 안내할 거예요.
EKS 클러스터 시작하기
먼저 AWS 문서의 단계, 특히 사전 요구 사항과 Step 1-4의 단계를 따라 EKS 클러스터를 시작하세요.
요약하면 그 단계는 다음과 같아요.
- AWS CLI와 Kubectl 설치
- Amazon EKS 클러스터 생성
- Step 3에서 클러스터에 노드를 추가할 때 다음을 사용하세요
- AMI type - Amazon Linux 2023 - Nvidia (nvidia drivers pre-installed)
- Instance Type - g5.2xlarge - 8vCPU
- Storage - 512 GB
그런 다음 AWS 콘솔에서 클러스터 정보를 확인할 수 있어요.
환경 변수 정의
다음으로 AWS CLI와 Kubectl이 설치된 머신에서 환경 변수를 설정하세요.
export CUSTOMER_TAG=proxy.replicated.com/proxy/cohere/us-docker.pkg.dev/cohere-artifacts/replicated/single-serving-embed-multilingual-03:<YOUR_MODEL_TAG>
export LICENSE_ID="<YOUR_LICENSE_ID>"
export DOCKER_CONFIG=$(mktemp -d)
cat <<EOF > "${DOCKER_CONFIG}/config.json" { "auths": { "proxy.replicated.com": {"auth": "$(echo -n "${LICENSE_ID}:${LICENSE_ID}" | base64 | tr -d '\n')"}}EOF
kubectl create secret generic cohere-pull-secret --from-file=.dockerconfigjson="{$DOCKER_CONFIG}/config.json" --type=kubernetes.io/dockerconfigjson
애플리케이션 매니페스트 생성
다음으로 cohere.yaml이라는 이름의 파일을 만들어 애플리케이션 매니페스트를 생성하세요. 파일 내용은 이 링크에서 복사해야 해요.
배포 시작
다음으로 구성 파일을 적용해 배포를 시작하세요. 그런 다음 파드의 상태를 확인하고 로그를 모니터링하세요.
kubectl apply -f cohere.yaml
kubectl get pods
kubectl logs -f <pod-name-from-above-command>
모델 호출하기
다음으로 먼저 포트 포워딩을 설정해 모델을 실행하세요.
kubectl port-forward svc/cohere 8080:8080
그런 다음 두 번째 창을 열고 curl 명령으로 테스트 요청을 보내세요.
curl --header "Content-Type: application/json" --request POST http://localhost:8080/embed --data-raw '{"texts": ["testing embeddings in english"], "input_type": "classification"}'