Amazon SageMaker에서 대규모 모델 추론 DLC와 함께 Falcon-40B 배포 | 아마존 웹 서비스

Amazon SageMaker에서 대규모 모델 추론 DLC와 함께 Falcon-40B 배포 | 아마존 웹 서비스

지난 주, 기술혁신연구소(TII) 시작 TII 팔콘 LLM, 오픈 소스 기반 대규모 언어 모델(LLM). 1조 개의 토큰으로 교육 아마존 세이지 메이커, Falcon은 최고 수준의 성능을 자랑합니다. 포옹하는 얼굴 순위표 llama-65B와 같은 다른 LLM보다 비교적 가볍고 호스팅 비용이 저렴합니다. 이 게시물에서는 SageMaker에서 대규모 모델 추론 딥 러닝 컨테이너를 사용하여 언어 이해 및 자동 작성 지원과 같은 애플리케이션을 위해 Falcon을 배포하는 방법을 시연합니다.

Falcon이 SageMaker에 착륙했습니다.

TII는 아부다비 내 응용 연구 기관입니다. 첨단 기술 연구 협의회; 과학자, 연구원 및 엔지니어 팀은 우리 사회의 미래를 보장할 변혁적 기술의 발견과 과학적 돌파구의 개발에 전념하고 있습니다. 올해 초 TII는 최첨단 오픈 소스 LLM을 교육하기 시작했고 SageMaker의 인프라, 도구 및 전문 지식을 사용하여 작업을 완료했습니다(이 모델이 SageMaker에서 어떻게 교육되었는지 자세히 알아보기 위해). , 인용하다 Technology Innovation Institute는 Amazon SageMaker에서 최첨단 Falcon LLM 40B 기반 모델을 교육합니다.). 이러한 노력의 결과는 TII 팔콘 LLM.

1조 개의 토큰으로 훈련된 Falcon은 Eleuther AI 언어 모델 평가 하네스 그리고 현재 1위 포옹하는 얼굴 순위표 정확성을 위해. 이 모델은 Falcon-40B 및 Falcon-7B의 두 가지 크기로 제공되며 언어 이해, 대화 경험 및 자동 쓰기 지원과 같은 응용 프로그램에서 최첨단 성능을 위해 사용할 수 있습니다. 이 게시물은 이러한 유형의 도메인에서 고정확도 추론을 위해 SageMaker에 Falcon 배포를 시작하는 데 도움이 됩니다.

SageMaker 대형 모델 추론 DLC는 LLM 호스팅을 단순화합니다.

Falcon-40B 및 Falcon-7B와 같은 LLM을 호스팅하는 것은 어려울 수 있습니다. 더 큰 모델은 수십억 개의 매개변수를 포함하기 때문에 종종 더 정확하지만 그 크기는 더 느린 추론 대기 시간 또는 더 나쁜 처리량으로 이어질 수 있습니다. LLM을 호스팅하려면 수용 가능한 성능을 달성하기 위해 더 많은 GPU 메모리와 최적화된 커널이 필요할 수 있습니다. Falcon-7B와 같은 더 작은 모델은 일반적으로 AWS G10 인스턴스 유형을 지원하는 NVIDIA A5G 인스턴스와 같은 단일 GPU에 맞지만 Falcon-40B와 같은 더 큰 모델은 그렇지 않습니다. 이런 일이 발생하면 텐서 병렬 처리와 같은 전략을 사용하여 더 큰 모델을 여러 조각으로 분할하고 여러 GPU의 메모리를 활용해야 합니다. 더 작은 모델에 사용되는 레거시 호스팅 솔루션은 일반적으로 이러한 유형의 기능을 제공하지 않아 어려움이 가중됩니다.

SageMaker LMI(Large Model Inference) 딥 러닝 컨테이너(DLC)가 도움이 될 수 있습니다. LMI DLC는 Falcon-40B와 같은 LLM을 호스팅하기 위한 완전한 종단 간 솔루션입니다. 프런트 엔드에는 인스턴스 내에서 토큰 스트리밍 및 자동 모델 복제와 같은 기능을 사용하여 대규모 모델 추론을 위해 설계된 고성능 모델 서버(DJL Serving)가 포함되어 처리량을 증가시킵니다. 백엔드에서 LMI DLC에는 여러 GPU에서 모델 매개변수를 샤딩하고 관리할 수 있는 DeepSpeed ​​및 FasterTransformer와 같은 여러 고성능 모델 병렬 엔진도 포함되어 있습니다. 이러한 엔진에는 인기 있는 변압기 모델에 최적화된 커널도 포함되어 있어 추론을 최대 XNUMX배 더 빠르게 가속화할 수 있습니다. LMI DLC를 사용하면 구성 파일을 생성하기만 하면 SageMaker에서 LLM 호스팅을 시작할 수 있습니다. SageMaker LMI DLC에 대한 자세한 내용은 다음을 참조하십시오. 모델 병렬화 및 대규모 모델 추론 & 사용 가능한 이미지 목록. 호스팅에 대한 이전 게시물을 확인할 수도 있습니다. SageMaker의 Bloom-175B LMI DLC 사용.

솔루션 개요

이 게시물은 LMI DLC를 사용하여 SageMaker에서 DeepSpeed를 사용하여 Falcon-40B를 호스팅하는 방법을 안내합니다. Falcon-40B는 여러 A10 GPU를 사용해야 하는 반면 Falcon-7B는 단일 GPU만 필요합니다. DeepSpeed와 Accelerate를 모두 사용하여 호스트 Falcon-40B 및 Falcon-7B를 참조할 수 있는 예제도 준비했습니다. 코드 예제는 다음에서 찾을 수 있습니다. GitHub의.

이 예제는 SageMaker 노트북 인스턴스 또는 아마존 세이지 메이커 스튜디오 노트북. LMI 및 DeepSpeed를 사용하여 Falcon-40B를 호스팅하려면 ml.g5.24xlarge 인스턴스를 사용해야 합니다. 이러한 인스턴스는 각각 4GiB의 GPU 메모리를 지원하는 10x NVIDIA A96G GPU를 제공합니다. 또한 호스트는 96개의 vCPU와 384GiB의 호스트 메모리를 제공합니다. LMI 컨테이너는 구성 매개변수가 여러 GPU에 분산될 수 있도록 모델 다운로드 및 모델 아티팩트 분할을 포함하여 LLM 호스팅과 관련된 차별화되지 않은 많은 작업을 처리하는 데 도움이 됩니다.

SageMaker 기계 학습(ML) 인스턴스에 대한 할당량은 계정마다 다를 수 있습니다. 이 게시물을 따라가는 동안 g5.24xlarge 인스턴스에 대한 할당량을 초과했다는 오류가 표시되면 다음을 통해 한도를 늘릴 수 있습니다. 서비스 할당량 콘솔.

노트북 연습

시작하려면 예제에 필요한 종속성을 설치하고 가져오는 것으로 시작합니다. 우리는 Boto3 SDK와 SageMaker SDK를 사용합니다. 우리가 사용하는 참고 아마존 단순 스토리지 서비스 (Amazon S3) SageMaker 및 LMI가 사용하는 데 필요한 모델 아티팩트를 저장하므로 이에 따라 S3 접두사 변수를 설정합니다. 다음 코드를 참조하십시오.

import sagemaker
import jinja2
from sagemaker import image_uris
import boto3
import os
import time
import json
from pathlib import Path
from sagemaker.utils import name_from_base role = sagemaker.get_execution_role() # execution role for the endpoint
sess = sagemaker.session.Session() # sagemaker session for interacting with different AWS APIs
bucket = sess.default_bucket() # bucket to house artifacts
model_bucket = sess.default_bucket() # bucket to house artifacts
s3_code_prefix_deepspeed = "hf-large-model-djl-/code_falcon40b/deepspeed" # folder within bucket where code artifact will go
region = sess._region_name
account_id = sess.account_id()
s3_client = boto3.client("s3")
sm_client = boto3.client("sagemaker")
smr_client = boto3.client("sagemaker-runtime")
jinja_env = jinja2.Environment()

그런 다음 모델 아티팩트를 저장할 작업 공간의 로컬 폴더를 만듭니다.

!mkdir -p code_falcon40b_deepspeed

우리는 먼저 serving.properties 우리가 만든 로컬 디렉토리의 구성 파일. 이것 serving.properties 파일은 우리가 사용하려는 모델 병렬화 및 추론 최적화 엔진을 LMI 컨테이너 및 프런트 엔드 DJL Serving 라이브러리에 나타냅니다. DeepSpeed ​​및 Hugging Face Accelerate에 대한 구성 옵션은 다음에서 찾을 수 있습니다. 구성 및 설정. 여기에서 우리는 option.model_id 가져올 Hugging Face 모델을 정의하는 매개변수입니다. SageMaker를 사용하면 Hugging Face 모델 작업이 간단해지며 이 한 줄만 있으면 됩니다. 또한, 우리는 설정 option.tensor_parallel_degree ml.g4xlarge 인스턴스에 5.24개의 GPU가 있으므로 값을 5.48로 설정합니다. 이 매개변수는 생성 및 배포할 모델의 파티션 수를 정의합니다. ml.g4xlarge와 같이 GPU가 XNUMX개인 더 큰 인스턴스를 사용하고 여전히 값을 XNUMX로 설정한 경우 LMI는 모델의 복제본 XNUMX개를 자동으로 생성합니다(각각 GPU XNUMX개에 분산된 복제본 XNUMX개). 다음 코드를 참조하십시오.

%%writefile ./code_falcon40b_deepspeed/serving.properties
engine=Python
#to deploy falcon-40b-instruct set the model_id value to 'tiiuae/falcon-40b-instruct'
option.model_id=tiiuae/falcon-40b
option.tensor_parallel_degree=4
#option.s3url = {{s3url}}

갈아탈 수도 있습니다 tiiuae/falcon-40btiiuae/falcon-40b-instruct 귀하의 필요에 더 잘 맞는 경우.

우리는 또한 requirements.txt 필요한 패키지를 설치하기 위해 지정할 수 있는 파일:

%%writefile ./code_falcon40b_deepspeed/requirements.txt
einops
torch==2.0.1

마지막으로 필요한 것은 model.py 모델과 함께 사용할 파일:

%%writefile ./code_falcon40b_deepspeed/model.py
from djl_python import Input, Output
import os
import torch
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
from typing import Any, Dict, Tuple
import warnings predictor = None def get_model(properties): model_name = properties["model_id"] local_rank = int(os.getenv("LOCAL_RANK", "0")) model = AutoModelForCausalLM.from_pretrained( model_name, low_cpu_mem_usage=True, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map="auto", ) tokenizer = AutoTokenizer.from_pretrained(model_name) generator = pipeline( task="text-generation", model=model, tokenizer=tokenizer, device_map="auto" ) return generator def handle(inputs: Input) -> None: global predictor if not predictor: predictor = get_model(inputs.get_properties()) if inputs.is_empty(): # Model server makes an empty call to warmup the model on startup return None data = inputs.get_as_json() text = data["text"] text_length = data["text_length"] outputs = predictor(text, do_sample=True, min_length=text_length, max_length=text_length) result = {"outputs": outputs} return Output().add_as_json(result)

그게 다야! 이제 DeepSpeed로 Falcon-40B를 배포하는 데 필요한 모든 아티팩트를 생성했습니다! 디렉터리를 *.tar.gz 파일로 패키징하고 Amazon S3에 업로드합니다. 실제 모델은 이 파일에 다운로드되거나 패키징되지 않았습니다. LMI 컨테이너는 Hugging Face에서 직접 모델을 다운로드합니다. 또한 다운로드 성능이 더 좋은 위치에 자신의 모델 사본을 원하는 경우 S3 버킷을 대상으로 지정할 수도 있습니다. LMI에는 고성능 Amazon S3에서 다운로드하기 위한 최적화도 포함되어 있습니다. 다음 코드를 참조하십시오.

s3_code_artifact_deepspeed= sess.upload_data("model.tar.gz", bucket, s3_code_prefix_deepspeed)
print(f"S3 Code or Model tar for deepspeed uploaded to --- > {s3_code_artifact_deepspeed}")

이 시점에서 남은 작업은 사용할 컨테이너를 정의하고 모델 개체를 만드는 것입니다.

inference_image_uri = ( f"763104351884.dkr.ecr.{region}.amazonaws.com/djl-inference:0.22.1-deepspeed0.8.3-cu118"
)
model_name_acc = name_from_base(f"falcon40b-model-ds")
create_model_response = sm_client.create_model( ModelName=model_name_acc, ExecutionRoleArn=role, PrimaryContainer={"Image": inference_image_uri, "ModelDataUrl": s3_code_artifact_deepspeed},
)
model_arn = create_model_response["ModelArn"]

그런 다음 끝점 구성을 만들고 끝점을 만듭니다.


endpoint_config_name = f"{model_name}-config"
endpoint_name = f"{model_name}-endpoint"
endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": "variant1", "ModelName": model_name, "InstanceType": "ml.g5.24xlarge", "InitialInstanceCount": 1, "ModelDataDownloadTimeoutInSeconds": 3600, "ContainerStartupHealthCheckTimeoutInSeconds": 3600, # "VolumeSizeInGB": 512 }, ],
)
endpoint_config_response create_endpoint_response = sm_client.create_endpoint( EndpointName=f"{endpoint_name}", EndpointConfigName=endpoint_config_name
)
print(f"Created Endpoint: {create_endpoint_response['EndpointArn']}")

성공적인 호스팅을 위해 기억해야 할 구성 항목

대규모 모델 호스팅에 대한 중요한 고려 사항은 Hugging Face에서 모델을 다운로드할 충분한 시간이 있는지 확인하는 것입니다. 테스트에서 Falcon-40B를 인스턴스에 다운로드하는 데 약 90분이 걸렸습니다. 이를 허용하는 주요 구성 세트는 다음과 같습니다. ContainerStartupHealthCheckTimeoutInSecondsModelDataDownloadTimeoutInSeconds. SageMaker 엔드포인트 구성의 값이 각각 3600인지 확인하십시오. 또한 S3cmd 유틸리티를 사용하는 LLMS용으로 특별히 설계된 LMI 컨테이너를 사용하여 모델 다운로드 시간을 약 5분으로 단축하는 원래 모델 동물원 대신 Amazon S10에서 다운로드하는 것이 훨씬 더 쉽습니다.

다음을 호출하여 끝점의 상태를 모니터링할 수 있습니다. DescribeEndpoint, 모든 것이 완료되면 알려줍니다. 이제 엔드포인트가 추론 요청에 응답할 준비가 되었습니다! LMI가 모델 파티셔닝 및 오케스트레이션을 처리하므로 각 요청은 ml.g4xlarge 인스턴스에서 사용 가능한 5.12개의 GPU를 모두 사용하여 처리됩니다. 이를 통해 GPU 가속기를 수평으로 확장하는 경우 LLM을 호스팅하고 성능을 높일 수 있습니다. 다음 코드를 참조하십시오.

response_model = smr_client.invoke_endpoint( EndpointName=endpoint_name, Body=json.dumps({"text": "What is the purpose of life?", "text_length": 150}), ContentType="application/json",
) response_model["Body"].read().decode("utf8")

작업을 완료하고 끝점 구성, 끝점 및 모델 개체를 삭제하려는 경우 다음 명령을 실행할 수 있습니다.

sm_client.delete_endpoint(EndpointName=endpoint_name)
sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
sm_client.delete_model(ModelName=model_name)

이 게시물에서 참조한 이 코드는 전체에서 찾을 수 있습니다. GitHub의 노트북.

결론

SageMaker Hosting 및 LMI DLC를 사용하면 Falcon-40B와 같은 LLM을 쉽게 호스팅할 수 있습니다. 여러 GPU에서 모델을 호스팅하는 데 필요한 것을 오케스트레이션하는 데 있어 차별화되지 않은 무거운 작업을 수행하고 필요에 맞게 구성 가능한 옵션을 제공합니다. 또한 Hugging Face 모델을 사용하는 것은 이러한 모델에 대한 기본 제공 지원을 통해 매우 간단해집니다.

이 게시물에서는 SageMaker를 사용하여 DeepSpeed를 사용하여 Falcon-40B 모델을 호스팅하는 방법을 보여주었습니다. 또한 다음에서 예제를 제공했습니다. GitHub의 Accelerate를 사용하여 Falcon-40B 및 더 작은 Falcon-7B 모델을 호스트합니다. LMI가 포함된 SageMaker에서 이 기능을 사용해 보고 지금까지 공개적으로 사용 가능한 LLM 중 최고 성능을 직접 경험해 보시기 바랍니다!


저자 소개

Amazon SageMaker에 대규모 모델 추론 DLC가 포함된 Falcon-40B 배포 | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.제임스 파크 Amazon Web Services의 솔루션 아키텍트입니다. 그는 Amazon.com과 협력하여 AWS에서 기술 솔루션을 설계, 구축 및 배포하며 특히 AI 및 기계 학습에 관심이 있습니다. H는 여가 시간에 새로운 문화, 새로운 경험을 찾고 최신 기술 동향을 파악하는 것을 즐깁니다. 그를 찾을 수 있습니다. 링크드인.

Amazon SageMaker에 대규모 모델 추론 DLC가 포함된 Falcon-40B 배포 | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.아비 시바디티야 인공 지능, 분산 컴퓨팅, 네트워킹 및 스토리지와 같은 영역에서 AWS 서비스 채택을 촉진하기 위해 전략적 글로벌 기업 조직과 협력하는 AWS의 수석 솔루션 설계자입니다. 그의 전문성은 자연어 처리(NLP) 및 컴퓨터 비전 영역의 딥 러닝에 있습니다. Abhi는 고객이 AWS 에코시스템 내에서 고성능 기계 학습 모델을 효율적으로 배포할 수 있도록 지원합니다.

Amazon SageMaker에 대규모 모델 추론 DLC가 포함된 Falcon-40B 배포 | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.로버트 반 두센 Amazon SageMaker의 수석 제품 관리자입니다. 그는 대규모 모델 추론과 같은 애플리케이션을 위한 딥 러닝 모델 최적화를 이끌고 있습니다.

Amazon SageMaker에 대규모 모델 추론 DLC가 포함된 Falcon-40B 배포 | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.에반드로 프랑코 Amazon Web Services에서 일하는 AI/ML 전문 솔루션 아키텍트입니다. 그는 AWS 고객이 AWS를 기반으로 AI/ML과 관련된 비즈니스 과제를 극복하도록 돕습니다. 그는 소프트웨어 개발, 인프라, 서버리스, 기계 학습에 이르기까지 기술 분야에서 15년 이상 일했습니다.

Amazon SageMaker에 대규모 모델 추론 DLC가 포함된 Falcon-40B 배포 | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.칭란 AWS의 소프트웨어 개발 엔지니어입니다. 그는 고성능 ML 추론 솔루션 및 고성능 로깅 시스템을 포함하여 Amazon에서 여러 도전적인 제품을 작업해 왔습니다. Qing의 팀은 요구되는 매우 짧은 지연 시간으로 Amazon Advertising에서 첫 번째 XNUMX억 매개변수 모델을 성공적으로 출시했습니다. Qing은 인프라 최적화 및 딥 러닝 가속화에 대한 심층 지식을 보유하고 있습니다.

Amazon SageMaker에 대규모 모델 추론 DLC가 포함된 Falcon-40B 배포 | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.프랭크 리우 AWS Deep Learning의 소프트웨어 엔지니어입니다. 그는 소프트웨어 엔지니어와 과학자를위한 혁신적인 딥 러닝 도구를 구축하는 데 중점을 둡니다. 여가 시간에는 친구 및 가족과 함께 하이킹을 즐깁니다.

타임 스탬프 :

더보기 AWS 기계 학습