우수한 소프트웨어와 실용적인 튜토리얼
AWS Bedrock에 DeepSeek R1을 배포하는 방법
DeepSeek은 전 세계를 충격에 빠뜨렸으며, 그 인기는 그해 출시된 ChatGPT에 버금갑니다. Amazon Cloud는 DeepSeek 배포를 처음으로 지원했습니다. 여기에서는 DeepSeek 배포 방법을 안내해 드리겠습니다.
AWS 베드록 현재 지원됨사용자 정의 모델 가져오기기능은 있지만 2025년 1월 현재 다음과만 호환됩니다. 라마 건축,Qwen 아키텍처는 현재 지원되지 않습니다.따라서 수입할 때 딥시크 R1 이 증류 모델 세트는Qwen 아키텍처 기반 32B 버전을 선택할 수 없습니다., 유일하게 사용 가능한 8B 및 70B 매개변수에 대한 Llama 버전이 배포에서는 다음을 선택합니다. 버전 70B, 그리고 사용 사용자 정의 모델 가져오기 Bedrock에서 기능, 완전한 모델 가져오기 및 배포.
아직 Amazon Cloud 계정이 없다면 먼저 계정을 신청하세요.
Amazon Cloud에 등록하는 방법은 매우 간단합니다. 먼저 아래 공식 웹사이트 입구를 통해 Amazon 공식 웹사이트에 접속하세요.
자세한 등록 튜토리얼:2025년 무료 AWS EC2 클라우드 서버 지원, 보모 수준 튜토리얼!
참고: 다음 튜토리얼은 Amazon Cloud에 결제가 필요한 DeepSeek를 배포합니다. 무료 배포 튜토리얼이 아니며, 초보자에게는 적합하지 않습니다. 참고!
DeepSeek R1 모델 파일을 S3 버킷에 다운로드합니다.
DeepSeek R1 모델을 다운로드할 때 해당 아키텍처가 요구 사항을 충족하는지 확인해야 합니다. 2025년 1월 현재 AWS Bedrock은 Llama와 같은 아키텍처를 사용하는 모델의 가져오기만 지원하며, Qwen 아키텍처는 현재 지원하지 않습니다. DeepSeek R1의 Qwen-7B 버전을 다운로드하면 가져오기 작업을 시작할 때 다음 오류 메시지가 표시됩니다.
Amazon Bedrock은 가져오려는 모델의 아키텍처(qwen2)를 지원하지 않습니다. 다음 지원되는 아키텍처 중 하나로 다시 시도해 보세요: [llama, mistral, t5, mixtral, gpt_bigcode, mllama, poolside].
따라서 아키텍처 비호환성으로 인해 작업이 실패하는 것을 방지하기 위해 가져오기 전에 모델 아키텍처를 반드시 확인하세요.
클라우드 서버 EC2 인스턴스 생성
예를 들어 us-west-2(오리건) 지역을 살펴보면, 먼저 EC2 인스턴스를 만들고 t3.medium 모델(2 vCPU/4GB 메모리)을 선택하고 운영 체제로 최신 버전의 Amazon Linux 2023을 설치합니다.
스토리지 구성 측면에서는 200GB gp3 디스크를 선택하고 EBS 디스크 처리량을 기본 125MB/s에서 1000MB/s로 높여 업로드 및 다운로드 속도를 높이세요. 또한, 필요한 파일과 소프트웨어를 원활하게 다운로드할 수 있도록 인스턴스에 외부 네트워크 액세스 권한이 있는지 확인하세요.
인스턴스가 생성된 후 후속 구성 및 사용을 위해 EC2에 필요한 소프트웨어 패키지를 설치합니다.
yum install python3-pip -y pip install huggingface_hub boto3
다음 내용으로 download.py 파일을 작성하세요.
huggingface_hub에서 스냅샷 다운로드 가져오기 model_id = "deepseek-ai/DeepSeek-R1-Distill-Llama-70B" local_dir = 스냅샷 다운로드(repo_id=model_id, local_dir = "DeepSeek-R1-Distill-Llama-70B")
그런 다음 python3 download.py를 실행하여 모델을 다운로드합니다. 다운로드가 진행 중입니다.
다운로드가 완료되면 EC2 클라우드 서버에 일련의 deepseek 파일이 생성됩니다. Llama 70b 매개변수 모델을 기준으로 파일 크기는 약 132GB입니다.
AWS에서 S3 버킷을 생성하고 업로드합니다.
S3 버킷을 생성합니다. 버킷을 생성할 때 버킷 유형으로 '일반 용도'를 선택합니다. 리전은 EC2 리전과 동일해야 합니다. 예를 들어, 둘 다 오리건 주 US-WEST-2 리전에 속해야 합니다. 다른 옵션은 기본값으로 유지합니다. 이 버킷은 공개적으로 액세스할 수 있도록 설정할 필요는 없습니다.
AWS 콘솔 S3 메뉴에서 버킷 만들기를 클릭합니다.
버킷을 생성하는 과정에서 공개 접근이 필요하지 않으면 버킷 이름을 입력하고, 다른 옵션은 기본값으로 두고, 만들기를 클릭합니다.
오른쪽 상단의 계정 메뉴에서 보안 자격 증명을 클릭하고 액세스 키 옵션에서 액세스 키를 만듭니다.
액세스 키 생성을 클릭한 후 루트 사용자에 대한 액세스 키를 생성합니다.액세스 키를 생성할지 여부를 선택하세요.
액세스 키 생성을 클릭하면 루트 액세스 키가 성공적으로 생성됩니다.
이 키는 AWS 전체에 대한 액세스 키입니다. 보안상의 이유로 공개하지 마십시오.
버킷을 만든 후에는 다음 파일 세트를 업로드해야 합니다.
- 모델 구성 파일: config.json
- 토크나이저 파일: 총 3개가 있습니다: tokenizer.json, tokenizer_config.json 및 tokenizer.mode
- 모델 가중치 파일: 이전 단계의 모델 가중치 파일은 .safetensors 확장자를 가진 많은 파일 시리즈를 다운로드했습니다.
이러한 파일은 모두 이전 단계에서 다운로드한 디렉토리에 있으므로 추가로 추가할 필요가 없습니다.
다음으로, 다음 내용을 담은 upload.py라는 이름의 업로드 파일을 준비합니다.
import boto3 import os s3_client = boto3.client('s3', region_name='us-west-2') bucket_name = 'bedrock-custom-model-import-123456789012' local_directory = 'DeepSeek-R1-Distill-Llama-70B' os.walk(local_directory)에 있는 root, 디렉토리, 파일에 대해: file in files: local_path = os.path.join(root, file) s3_key = os.path.relpath(local_path, local_directory) s3_client.upload_file(local_path, bucket_name, s3_key)
위 파일의 버킷 이름을 실제 버킷 이름으로 바꾸고, Region을 실제 Region으로 바꾸고, 이전 단계에서 다운로드한 디렉터리가 올바른지 확인하세요. 다음으로, 이 EC2가 S3에 파일을 업로드할 권한이 있는지 확인해야 합니다. 1) 로컬 머신에 AWSCLI 키를 구성하거나, 2) 로컬 머신에 키를 설정하지 않고 EC2에 IAM 역할을 설정하고, 해당 IAM 역할에 S3 쓰기 권한을 추가하면 됩니다.
설정 후 python3 upload.py를 실행하여 업로드합니다. 70B 모델은 총 132GB 정도이며, S3에 업로드하는 데 5~10분이 걸립니다.
DeepSeek R1 모델을 Bedrock으로 가져오기
1단계: 모델 가져오기
해당 지역의 Bedrock 서비스에 접속하여 해당 지역이 맞는지 확인 후 왼쪽 메뉴를 클릭합니다.수입 모델
그런 다음 클릭하세요수입 모델
가져오기 버튼. 아래 스크린샷을 참조하세요.

가져오기 마법사의 첫 번째 단계에서 가져온 모델의 이름을 입력합니다. 여기서는 다음을 사용합니다.딥시크-r1-디스틸드-70b
즉, 버전 번호가 이름으로 사용됩니다. 이 페이지의 옵션은 변경할 필요가 없습니다. 화면을 계속 아래로 스크롤하세요. 스크린샷은 다음과 같습니다.

모델 가져오기 설정 섹션에 이전 단계에서 모델이 업로드된 버킷의 이름을 입력합니다. 이전 단계의 Python 스크립트는 모델 파일을 버킷의 루트 디렉터리에 업로드하므로 여기에 버킷 이름만 입력하면 됩니다. 아래에서 모델을 가져오는 데 사용할 서비스 역할 위치를 선택합니다.새로운 서비스 역할을 만들고 사용하세요
IAM 역할을 미리 수동으로 생성할 필요는 없습니다. 모델 가져오기 마법사가 자동으로 생성합니다. 그런 다음 페이지 하단으로 스크롤하여 "모델 가져오기" 버튼을 클릭하세요. 아래 스크린샷을 참조하세요.

제출 후 마법사는 모델 가져오기에 필요한 IAM 역할을 자동으로 생성합니다. 브라우저는 이 시점에서 페이지를 벗어날 수 없습니다. IAM 역할이 생성되면 모델 가져오기 작업이 자동으로 제출되고 백그라운드로 전환됩니다. 브라우저는 현재 페이지를 벗어날 수 있습니다. 아래 스크린샷을 참조하세요.

약 1분 후 IAM 역할이 생성되고 웹 페이지가 자동으로 모델 가져오기 작업이 진행 중인 인터페이스로 이동합니다. 이때 현재 페이지를 벗어날 수 있습니다. 전체 모델 가져오기 프로세스는 가져온 모델의 크기에 따라 15분에서 30분 또는 그 이상 걸릴 수 있습니다. 다음 스크린샷을 참조하세요.

잠시 기다린 후 가져오기가 성공적으로 완료되었습니다. 아래 스크린샷을 확인하세요.

다음으로, 테스트를 시작합니다.
2단계: Bedrock 콘솔에서 테스트 시작
Bedrock 서비스를 입력하고 왼쪽을 클릭하세요.놀이터
메뉴에서 오른쪽의 모드 드롭다운 상자에서 다음을 선택하세요.단일 프롬프트
사용자 지정 모델을 가져온 후에는 Bedrock 콘솔의 Single Prompt에서만 사용자 지정 모델을 볼 수 있습니다. 아래 스크린샷을 참조하세요.

다음으로, 모델 제공자 목록에서 다음을 볼 수 있습니다.사용자 지정 및 관리형 엔드포인트
가져온 모델은 다음과 같습니다. '적용'을 클릭하여 사용을 시작하세요. 아래 스크린샷을 참조하세요.

사용자 지정 모델을 Bedrock으로 가져온 후에는 모델이 실제로 시작되지 않는다는 점에 유의해야 합니다. 따라서 모델이 처음 호출될 때 모델은 GPU 리소스 풀에 로드됩니다. 이 과정에는 수십 초의 콜드 스타트(cold start)가 필요합니다. 모델이 시작되면 이후 호출은 지연 없이 바로 출력됩니다. 모델이 5분 이내에 호출되지 않으면 모델이 사용 중인 GPU 리소스가 해제되고, 모델을 다시 호출할 때 콜드 스타트 문제가 발생합니다.
가져온 사용자 지정 모델을 콘솔의 Playgrounds에서 호출하세요. 프롬프트 단어는 특정 쓰기 방식을 가지며 다음 형식으로 입력해야 합니다.
<|begin▁of▁sentence|><|User|> 당신은 어떤 모델입니까?
입력 후 페이지 상단에 모델 추론이 아직 준비되지 않았음을 나타내는 빨간색 프롬프트 상자가 표시됩니다.모델이 추론할 준비가 되지 않았습니다.
수십 초 동안 기다린 후 다시 제출하면 모델이 정상적으로 실행되는지 확인할 수 있습니다. 다음 스크린샷을 참조하세요.
이제 좀 더 복잡한, 생각을 요하는 예제로 바꿔 보겠습니다. 다음 프롬프트를 입력하고 제출해 보세요. 스크린샷은 다음과 같습니다.
<|begin▁of▁sentence|><|User|>다음 재무 데이터를 고려하세요. - 회사 A의 매출은 2023년에 $10M에서 $15M으로 증가했습니다. - 운영 비용은 20% 증가했습니다. - 초기 운영 비용은 $7M이었습니다. 회사의 2023년 영업 이익을 계산하세요. 단계별로 이유를 설명하고 최종 답변을 \\boxed{} 안에 입력하세요.<|Assistant|>

이 모델이 추론을 매우 잘 완료하고 있음을 알 수 있습니다.

아래에서 API 호출을 해보세요.
3단계: Bedrock API에서 테스트 시작
Bedrock API를 호출하기 전에 모델 ID를 얻어야 합니다. ARN 문자열인 모델 ID는 다음 위치에서 얻을 수 있습니다. 아래 스크린샷을 참조하세요.

다음으로, 다음의 Python 코드를 준비하세요.
boto3 가져오기 json 가져오기 client = boto3.client('bedrock-runtime', region_name='us-west-2') model_id = 'arn:aws:bedrock:us-west-2:133129065110:imported-model/otk6ql88yk9i' prompt = "어떤 모델이신가요?" response = client.invoke_model( modelId=model_id, body=json.dumps({'prompt': prompt}), accept='application/json', contentType='application/json' ) result = json.loads(response['body'].read().decode('utf-8')) print(result)
방금 Bedrock 콘솔을 호출하여 모델을 시작한 경우, 이 Python 프로그램을 실행할 때 콜드 스타트 시간이 발생하지 않으며 모델을 즉시 호출할 수 있습니다. 실행 후 반환되는 결과는 다음과 같습니다.
{'세대': '? \n\n
\n\n \n\n안녕하세요! 저는 중국 DeepSeek 회사에서 개발한 지능형 비서 DeepSeek-R1입니다. 궁금한 점이 있으시면 최선을 다해 도와드리겠습니다. ', 'generation_token_count': 52, 'stop_reason': 'stop', 'prompt_token_count': 4}
이 사용자 정의 모델은 정상적으로 실행됩니다.
사용자 지정 모델의 콜드 스타트에 맞게 코드를 조정하려면 예외 처리를 추가할 수 있습니다. 재시도 횟수와 예외 처리를 늘린 후의 코드는 다음과 같습니다.
import boto3 import json from botocore.config import Config config = Config( retries={ 'total_max_attempts': 10, 'mode': 'standard' } ) client = boto3.client('bedrock-runtime', region_name='us-west-2', config=config) model_id = 'arn:aws:bedrock:us-west-2:133129065110:imported-model/otk6ql88yk9i' prompt = "당신은 어떤 모델입니까?" 시도: 응답 = client.invoke_model( modelId=model_id, body=json.dumps({'prompt': prompt}), accept='application/json', contentType='application/json' ) 결과 = json.loads(response['body'].read().decode('utf-8')) print(result) 예외를 e로 제외: print(e) print(e.__repr__())
Bedrock 사용자 정의 모델 사용 시나리오 수수료 설명
Bedrock은 사용자 지정 모델을 가져올 때 입력 및 출력 토큰이 아닌, 모델을 가져온 후 실행하는 데 사용된 컴퓨팅 리소스를 기준으로 요금을 부과합니다. 다음 가격표는 AWS 공식 웹사이트에서 확인할 수 있습니다. 아래 스크린샷을 참조하세요.

모델 보관료
공식 안내에 따르면, 8b 모델을 가져오면 사용자 정의 모델 단위 2개를 차지합니다. 70b 매개변수 모델을 가져오면 사용자 정의 모델 단위 8개를 차지합니다.딥시크-r1-디스틸드-70b
예를 들어, 모델은 8개의 Custom Model Unit을 차지하므로 저장 비용은 다음과 같습니다.$1.95 * 8 = $15.6
한 달.
단일 사본에 대한 컴퓨팅 리소스 요금
사용자 지정 모델을 가져오는 데 걸리는 계산 시간은 5분을 기준으로 합니다. 5분 후에도 모델 호출이 없으면 컴퓨팅 리소스가 자동으로 해제됩니다. 다음에 모델이 호출될 때는 콜드 스타트 로딩 시간이 발생합니다. 예를 들어, 모델을 가져올 때는 가져오기 프로세스에 대한 요금이 부과되지 않습니다. 모델이 호출되지 않았기 때문입니다. 이번 달에는 스토리지 요금이 부과되지만 계산 시간은 부과되지 않습니다. 모델에 대한 첫 번째 호출은 모델을 가져온 다음 날 오전 10시에 이루어졌습니다. 이때 10시부터 10시 5분까지 8개의 사용자 지정 모델 단위 사용에 따라 5분 동안의 요금이 부과됩니다. 위 스크린샷에서 볼 수 있듯이 요금은 다음과 같습니다.모듈당 분당 $0.0785 * 8개 모듈 * 5분 = $3.14
이는 5분 동안 이 모델을 실행하는 데 드는 비용입니다.
첫 번째 5분 시간대는 10:05에 종료되고 모델은 5분 더 실행됩니다. 두 번째 5분 시간대에 모델 호출이 없으면 모델은 10:10에 리소스를 해제하고 총 2회의 5분 시간대 요금이 부과됩니다. 예를 들어, 두 번째 5분 시간대에 모델이 다시 호출되면(예: 10:07에 모델 호출) 두 번째 5분 요금 청구 시간대가 기록되고 10:10부터 3회의 5분 요금 청구 시간대가 시작됩니다. 세 번째 5분 시간대에 10:10부터 10:15까지 사용자 액세스가 없다고 가정하면 총 3회의 5분 시간대가 실행되고 총 요금은 다음과 같습니다.$3.14 * 3 = $9.42
이 논리에 따르면, 통화를 계속 사용하면 5분 단위를 기준으로 요금이 계속 청구됩니다.
잠시 실행해 보면 70b 모델이 컴퓨팅 유닛 8개, 5분 주기 4회, 총 20분을 소모하는 것을 확인할 수 있습니다. 이 비용은 약 24시간 후 이 AWS 계정의 청구서에서 확인할 수 있습니다. 아래 스크린샷을 참조하세요.

이것으로부터 우리는 다음을 가져올 수 있음을 알 수 있습니다.딥시크-r1-디스틸드-70b
모델을 한 달 동안 24시간 내내 실행한 후 총 비용은 다음과 같습니다.모듈당 분당 $0.0785 * 8개 모듈 * 60분 * 24시간 * 30일 = $27129.6(1개월 수수료).
70B 매개변수 모델은 수백 GB의 비디오 메모리를 소모하고 8개의 GPU 카드가 장착된 하드웨어에서 실행되어야 하기 때문입니다. 따라서 하루 종일 API 호출이 발생한다면 비용이 상대적으로 높아질 것입니다.
기반암 탄성 확장 및 다중 복제
위는 모델을 가져온 후 복제본을 실행하는 상황입니다. 복제본을 시작하면 8개의 사용자 지정 모델 단위가 사용됩니다. 현재 8개의 사용자 지정 모델 단위에 대한 토큰 입출력은 더 이상 추가 요금이 부과되지 않습니다. 그러나 복제본을 시작할 때 처리량이 무제한인 것은 아닙니다. 각 모델 복제본의 최대 처리량 및 동시성 제한은 모델 자체에 따라 달라지며, 특정 매개변수 크기의 모델을 가져올 때 자동으로 결정됩니다. Bedrock은 기본적으로 하나의 복제본을 시작합니다. 대규모 트래픽 호출의 경우 Bedrock은 자동 확장 기능을 제공합니다. 처리량이 하나의 복제본에서 처리하는 하드웨어 리소스를 모두 사용하면 두 번째 및 세 번째 복제본으로 자동으로 확장됩니다. 물론 새 복제본을 시작하면 8개의 사용자 지정 모델 단위가 더 사용되며 분 단위로 요금이 청구됩니다. 현재 AWS 계정의 기본 할당량 값은 3입니다. 즉, 동시성을 통해 사용자 지정 모델을 추가한 후에는 최대 3개의 복제본까지만 확장할 수 있습니다. 더 많은 할당량이 필요한 경우 지원 사례를 열어 제한 증가를 신청하십시오.
비용 및 모델 매개변수 크기 선택에 관하여
DeepSeek 모델은 사고 능력을 갖추고 있기 때문에 8B 모델 버전은 여러 시나리오에서 우수한 성능을 보여줍니다. 따라서 본 논문에서는 Bedrock 운영의 전체 프로세스를 설명하기 위해 70B 매개변수 버전을 사용합니다. 실제 비즈니스 환경에서는 8B 매개변수 모델을 사용하여 비용과 효과 간의 최적의 균형을 찾을 수 있습니다.
AWS 중국 공식 웹사이트:https://www.amazonaws.cn/