Triển khai Falcon-40B với DLC suy luận mô hình lớn trên Amazon SageMaker | Dịch vụ web của Amazon

Triển khai Falcon-40B với DLC suy luận mô hình lớn trên Amazon SageMaker | Dịch vụ web của Amazon

Tuần trước, Viện Đổi mới Công nghệ (TII) phát động TII Falcon LLM, một mô hình ngôn ngữ lớn nền tảng mã nguồn mở (LLM). Được đào tạo trên 1 nghìn tỷ mã thông báo với Amazon SageMaker, Falcon tự hào về hiệu suất đỉnh cao (#1 trên Bảng xếp hạng ôm mặt tại thời điểm viết bài) trong khi tương đối nhẹ và ít tốn kém hơn để lưu trữ so với các LLM khác như llama-65B. Trong bài đăng này, chúng tôi trình bày cách triển khai Falcon cho các ứng dụng như hiểu ngôn ngữ và hỗ trợ viết tự động bằng cách sử dụng các thùng chứa học sâu suy luận mô hình lớn trên SageMaker.

Falcon đã hạ cánh trên SageMaker

TII là tổ chức nghiên cứu ứng dụng trong Abu Dhabi's Hội đồng nghiên cứu công nghệ tiên tiến; đội ngũ các nhà khoa học, nhà nghiên cứu và kỹ sư của nó cống hiến cho việc khám phá các công nghệ biến đổi và phát triển các đột phá khoa học sẽ là bằng chứng cho xã hội của chúng ta trong tương lai. Đầu năm nay, TII bắt đầu đào tạo một LLM mã nguồn mở, tiên tiến nhất và sử dụng cơ sở hạ tầng, công cụ cũng như chuyên môn của SageMaker để hoàn thành công việc (để tìm hiểu thêm về cách đào tạo mô hình này trên SageMaker , tham khảo Viện Đổi mới Công nghệ đào tạo mô hình nền tảng Falcon LLM 40B hiện đại nhất trên Amazon SageMaker). Kết quả của nỗ lực này là TII Falcon LLM.

Được đào tạo trên 1 nghìn tỷ mã thông báo, Falcon tự hào có hiệu suất vượt trội so với Khai thác đánh giá mô hình ngôn ngữ AI của Eleuther và hiện đang là số 1 trên Bảng xếp hạng ôm mặt cho chính xác. Mẫu này có sẵn ở hai kích cỡ khác nhau—Falcon-40B và Falcon-7B—và có thể được sử dụng để đạt hiệu suất cao nhất trong các ứng dụng như hiểu ngôn ngữ, trải nghiệm đàm thoại và hỗ trợ viết tự động. Bài đăng này sẽ giúp bạn bắt đầu triển khai Falcon trên SageMaker để suy luận có độ chính xác cao trong các loại miền này.

Các DLC suy luận mô hình lớn của SageMaker đơn giản hóa việc lưu trữ LLM

Lưu trữ các LLM như Falcon-40B và Falcon-7B có thể là một thách thức. Các mô hình lớn hơn thường chính xác hơn vì chúng bao gồm hàng tỷ tham số, nhưng kích thước của chúng cũng có thể dẫn đến độ trễ suy luận chậm hơn hoặc thông lượng kém hơn. Lưu trữ LLM có thể yêu cầu nhiều bộ nhớ GPU hơn và hạt nhân được tối ưu hóa để đạt được hiệu suất chấp nhận được. Phức tạp hơn nữa, mặc dù các mẫu nhỏ hơn như Falcon-7B thường có thể vừa với một GPU, chẳng hạn như phiên bản NVIDIA A10G hỗ trợ các loại phiên bản AWS G5, nhưng các mẫu lớn hơn như Falcon-40B thì không thể. Khi điều này xảy ra, các chiến lược như xử lý song song tensor phải được sử dụng để chia mô hình lớn hơn đó thành nhiều phần và tận dụng bộ nhớ của nhiều GPU. Các giải pháp lưu trữ cũ được sử dụng cho các mô hình nhỏ hơn thường không cung cấp loại chức năng này, làm tăng thêm khó khăn.

Các thùng chứa học sâu (DLC) suy luận mô hình lớn (LMI) của SageMaker có thể hữu ích. LMI DLC là một giải pháp đầu cuối hoàn chỉnh để lưu trữ các LLM như Falcon-40B. Ở giao diện người dùng, chúng bao gồm một máy chủ mô hình hiệu suất cao (DJL Phục vụ) được thiết kế để suy luận mô hình lớn với các tính năng như truyền mã thông báo và sao chép mô hình tự động trong một phiên bản để tăng thông lượng. Ở phần phụ trợ, các DLC LMI cũng bao gồm một số công cụ song song mô hình hiệu suất cao, chẳng hạn như DeepSpeed ​​và FasterTransformer, có thể phân đoạn và quản lý các tham số mô hình trên nhiều GPU. Các công cụ này cũng bao gồm các hạt nhân được tối ưu hóa cho các mẫu máy biến áp phổ biến, có thể tăng tốc độ suy luận nhanh hơn tới ba lần. Với các DLC LMI, bạn chỉ cần tạo một tệp cấu hình để bắt đầu với dịch vụ lưu trữ LLM trên SageMaker. Để tìm hiểu thêm về SageMaker LMI DLC, hãy tham khảo Mô hình song song và suy luận mô hình lớn và của chúng tôi danh sách các hình ảnh có sẵn. Bạn cũng có thể xem bài viết trước của chúng tôi về lưu trữ Bloom-175B trên SageMaker sử dụng LMI DLC.

Tổng quan về giải pháp

Bài đăng này hướng dẫn bạn cách lưu trữ Falcon-40B bằng DeepSpeed ​​trên SageMaker bằng LMI DLC. Falcon-40B yêu cầu chúng tôi sử dụng nhiều GPU A10, trong khi Falcon-7B chỉ yêu cầu một GPU duy nhất. Chúng tôi cũng đã chuẩn bị các ví dụ mà bạn có thể tham khảo để lưu trữ Falcon-40B và Falcon-7B sử dụng cả DeepSpeed ​​và Accelerate. Bạn có thể tìm thấy các ví dụ mã của chúng tôi trên GitHub.

Ví dụ này có thể được chạy trong các phiên bản sổ ghi chép SageMaker hoặc Xưởng sản xuất Amazon SageMaker sổ ghi chép. Để lưu trữ Falcon-40B bằng LMI và DeepSpeed, chúng tôi cần sử dụng phiên bản ml.g5.24xlarge. Các phiên bản này cung cấp 4 GPU NVIDIA A10G, mỗi GPU hỗ trợ 96 GiB bộ nhớ GPU. Ngoài ra, máy chủ cung cấp 96 vCPU và 384 GiB bộ nhớ máy chủ. Bộ chứa LMI sẽ giúp giải quyết phần lớn công việc nặng nhọc không phân biệt liên quan đến việc lưu trữ LLM, bao gồm tải xuống mô hình và phân vùng phần mềm mô hình sao cho các tham số cấu thành của nó có thể trải rộng trên nhiều GPU.

Hạn ngạch cho các phiên bản máy học (ML) SageMaker có thể khác nhau giữa các tài khoản. Nếu bạn gặp lỗi cho biết bạn đã vượt quá hạn ngạch cho các phiên bản g5.24xlarge khi theo dõi bài đăng này, bạn có thể tăng hạn mức thông qua Bảng điều khiển Hạn ngạch dịch vụ.

Hướng dẫn về sổ tay

Để bắt đầu, chúng tôi bắt đầu bằng cách cài đặt và nhập các phụ thuộc cần thiết cho ví dụ của chúng tôi. Chúng tôi sử dụng SDK Boto3 cũng như SDK SageMaker. Lưu ý rằng chúng tôi sử dụng Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) để lưu trữ các thành phần lạ của mô hình mà chúng tôi cần cho SageMaker và LMI sử dụng, vì vậy, chúng tôi đã thiết lập một biến tiền tố S3 tương ứng. Xem đoạn mã sau:

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()

Sau đó, chúng tôi tạo một thư mục cục bộ cho không gian làm việc của mình để lưu trữ các tạo phẩm mô hình của chúng tôi:

!mkdir -p code_falcon40b_deepspeed

Đầu tiên chúng ta tạo một serving.properties tệp cấu hình trong thư mục cục bộ mà chúng tôi đã tạo. Cái này serving.properties tệp chỉ ra bộ chứa LMI và thư viện Phục vụ DJL giao diện người dùng mô hình hóa công cụ tối ưu hóa suy luận và song song hóa mà chúng tôi muốn sử dụng. Bạn có thể tìm thấy các tùy chọn cấu hình cho cả DeepSpeed ​​và Ôm mặt tăng tốc trong Cấu hình và cài đặt. Ở đây, lưu ý rằng chúng tôi đặt option.model_id tham số để xác định mô hình Hugging Face sẽ lấy từ đó. SageMaker làm cho việc làm việc với các mô hình Hugging Face trở nên đơn giản và một dòng này là tất cả những gì bạn cần. Ngoài ra, chúng tôi thiết lập option.tensor_parallel_degree thành giá trị 4 vì chúng tôi có bốn GPU trên phiên bản ml.g5.24xlarge. Tham số này xác định có bao nhiêu phân vùng của mô hình để tạo và phân phối. Lưu ý rằng nếu chúng ta đã sử dụng một phiên bản lớn hơn với tám GPU, chẳng hạn như ml.g5.48xlarge và vẫn đặt giá trị là 4, thì LMI sẽ tự động tạo hai bản sao của mô hình (mỗi bản sao trải rộng trên bốn GPU). Xem đoạn mã sau:

%%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}}

Bạn cũng có thể hoán đổi tiiuae/falcon-40b với tiiuae/falcon-40b-instruct nếu nó phù hợp với nhu cầu của bạn tốt hơn.

Chúng tôi cũng bao gồm một requirements.txt tệp mà bạn có thể chỉ định để cài đặt các gói mà bạn yêu cầu:

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

Điều cuối cùng chúng ta cần là model.py tệp sẽ được sử dụng với mô hình của bạn:

%%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)

Đó là nó! Tại thời điểm này, chúng tôi đã tạo tất cả các thành phần tạo tác mà bạn sẽ cần để triển khai Falcon-40B với DeepSpeed! Chúng tôi đóng gói thư mục thành tệp *.tar.gz và tải nó lên Amazon S3. Lưu ý rằng mô hình thực tế chưa được tải xuống hoặc đóng gói vào tệp này. Bộ chứa LMI sẽ trực tiếp tải xuống mô hình cho bạn từ Hugging Face. Bạn cũng có tùy chọn nhắm mục tiêu bộ chứa S3 nếu bạn muốn bản sao mô hình của riêng mình ở một vị trí sẽ hiệu quả hơn để tải xuống. LMI cũng bao gồm tối ưu hóa để tải xuống từ Amazon S3 với hiệu suất cao. Xem đoạn mã sau:

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}")

Tất cả những gì còn lại phải làm vào thời điểm này là xác định vùng chứa mà chúng ta muốn sử dụng và tạo một đối tượng mô hình:

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"]

Sau đó, chúng tôi tạo cấu hình điểm cuối và tạo điểm cuối:


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']}")

Các mục cấu hình cần lưu ý để lưu trữ thành công

Một cân nhắc quan trọng đối với lưu trữ mô hình lớn là đảm bảo có đủ thời gian để tải xuống mô hình từ Hugging Face. Trong các thử nghiệm của chúng tôi, Falcon-40B mất khoảng 90 phút để tải xuống phiên bản. Một bộ cấu hình chính để cho phép điều này là ContainerStartupHealthCheckTimeoutInSecondsModelDataDownloadTimeoutTrong giây. Đảm bảo cấu hình điểm cuối SageMaker có giá trị 3600 cho mỗi điểm trong số này. Ngoài ra, việc tải xuống từ Amazon S3 sẽ dễ dàng hơn nhiều thay vì sở thú mô hình ban đầu bằng cách sử dụng bộ chứa LMI được thiết kế đặc biệt cho LLMS sử dụng tiện ích S5cmd, giúp giảm thời gian tải xuống mô hình xuống còn khoảng 10 phút.

Bạn có thể theo dõi trạng thái của điểm cuối bằng cách gọi DescribeEndpoint, sẽ cho bạn biết khi mọi thứ hoàn tất. Điểm cuối của bạn hiện đã sẵn sàng để đáp ứng các yêu cầu suy luận! Vì LMI xử lý việc phân vùng và điều phối mô hình cho bạn nên mỗi yêu cầu sẽ được xử lý bằng cách sử dụng tất cả 4 GPU có sẵn trên phiên bản ml.g5.12xlarge của chúng tôi. Điều này cho phép chúng tôi lưu trữ LLM và tăng hiệu suất nếu bạn mở rộng bộ tăng tốc GPU theo chiều ngang. Xem đoạn mã sau:

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")

Nếu bạn đã hoàn tất và muốn xóa cấu hình điểm cuối, điểm cuối và đối tượng mô hình, bạn có thể chạy các lệnh sau:

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

Mã này chúng tôi đã tham chiếu trong bài đăng này có thể được tìm thấy trong bản hoàn chỉnh sổ tay trên GitHub.

Kết luận

Dịch vụ lưu trữ SageMaker và LMI DLC giúp bạn dễ dàng lưu trữ các LLM như Falcon-40B. Nó đảm nhận công việc nặng nhọc không phân biệt trong việc phối hợp những gì cần thiết để lưu trữ các mô hình trên nhiều GPU và cung cấp các tùy chọn có thể định cấu hình để phù hợp với nhu cầu của bạn. Ngoài ra, việc sử dụng các mẫu Ôm khuôn mặt trở nên rất đơn giản, với sự hỗ trợ tích hợp cho các mẫu này.

Trong bài đăng này, chúng tôi đã chỉ ra cách bạn có thể sử dụng SageMaker để lưu trữ mô hình Falcon-40B bằng DeepSpeed. Ngoài ra, chúng tôi đã cung cấp các ví dụ trong GitHub để lưu trữ Falcon-40B bằng cách sử dụng Tăng tốc và các mẫu Falcon-7B nhỏ hơn. Chúng tôi khuyến khích bạn dùng thử tính năng này trên SageMaker với LMI và bắt tay vào sử dụng LLM công khai có hiệu suất tốt nhất cho đến nay!


Giới thiệu về tác giả

Triển khai Falcon-40B với các DLC suy luận mô hình lớn trên Amazon SageMaker | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Công viên James là Kiến trúc sư giải pháp tại Amazon Web Services. Anh làm việc với Amazon.com để thiết kế, xây dựng và triển khai các giải pháp công nghệ trên AWS, đồng thời có mối quan tâm đặc biệt đến trí tuệ nhân tạo và máy học. Trong thời gian rảnh rỗi, anh ấy thích tìm kiếm những nền văn hóa mới, trải nghiệm mới và cập nhật những xu hướng công nghệ mới nhất. Bạn có thể tìm thấy anh ấy trên LinkedIn.

Triển khai Falcon-40B với các DLC suy luận mô hình lớn trên Amazon SageMaker | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Abhi Shivaditya là Kiến trúc sư giải pháp cấp cao tại AWS, làm việc với các tổ chức doanh nghiệp toàn cầu chiến lược để tạo điều kiện thuận lợi cho việc áp dụng các dịch vụ AWS trong các lĩnh vực như Trí tuệ nhân tạo, điện toán phân tán, kết nối mạng và lưu trữ. Chuyên môn của anh ấy là Học sâu trong các lĩnh vực Xử lý ngôn ngữ tự nhiên (NLP) và Thị giác máy tính. Abhi hỗ trợ khách hàng triển khai các mô hình máy học hiệu năng cao một cách hiệu quả trong hệ sinh thái AWS.

Triển khai Falcon-40B với các DLC suy luận mô hình lớn trên Amazon SageMaker | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Robert Van Dusen là Giám đốc Sản phẩm Cấp cao của Amazon SageMaker. Ông dẫn đầu việc tối ưu hóa mô hình học sâu cho các ứng dụng như suy luận mô hình lớn.

Triển khai Falcon-40B với các DLC suy luận mô hình lớn trên Amazon SageMaker | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Evandro Franco là Kiến trúc sư Giải pháp Chuyên gia AI/ML làm việc trên Amazon Web Services. Anh ấy giúp khách hàng của AWS vượt qua các thách thức kinh doanh liên quan đến AI/ML trên AWS. Ông có hơn 15 năm làm việc với công nghệ, từ phát triển phần mềm, cơ sở hạ tầng, serverless, cho đến machine learning.

Triển khai Falcon-40B với các DLC suy luận mô hình lớn trên Amazon SageMaker | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Thanh Lan là Kỹ sư phát triển phần mềm trong AWS. Anh ấy đã làm việc trên một số sản phẩm đầy thử thách ở Amazon, bao gồm các giải pháp suy luận ML hiệu suất cao và hệ thống ghi nhật ký hiệu suất cao. Nhóm của Qing đã khởi chạy thành công mô hình Tỷ tham số đầu tiên trong Quảng cáo Amazon với độ trễ yêu cầu rất thấp. Qing có kiến ​​thức chuyên sâu về tối ưu hóa cơ sở hạ tầng và tăng tốc Deep Learning.

Triển khai Falcon-40B với các DLC suy luận mô hình lớn trên Amazon SageMaker | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Frank Lưu là Kỹ sư phần mềm cho AWS Deep Learning. Ông tập trung vào việc xây dựng các công cụ học tập sâu sáng tạo cho các kỹ sư phần mềm và nhà khoa học. Trong thời gian rảnh rỗi, anh ấy thích đi bộ đường dài với bạn bè và gia đình.

Dấu thời gian:

Thêm từ Học máy AWS