Terapkan Falcon-40B dengan DLC inferensi model besar di Amazon SageMaker | Layanan Web Amazon

Terapkan Falcon-40B dengan DLC inferensi model besar di Amazon SageMaker | Layanan Web Amazon

Pekan lalu, Institut Inovasi Teknologi (TII) diluncurkan TII Falcon LLM, model bahasa besar dasar (LLM) sumber terbuka. Dilatih pada 1 triliun token dengan Amazon SageMaker, Falcon menawarkan kinerja terbaik (#1 di Papan peringkat Wajah Memeluk pada saat penulisan) namun relatif ringan dan lebih murah untuk dihosting dibandingkan LLM lain seperti llama-65B. Dalam postingan ini, kami mendemonstrasikan cara menerapkan Falcon untuk aplikasi seperti pemahaman bahasa dan bantuan penulisan otomatis menggunakan wadah pembelajaran mendalam inferensi model besar di SageMaker.

Falcon telah mendarat di SageMaker

TII adalah organisasi penelitian terapan di Abu Dhabi Dewan Riset Teknologi Canggih; tim ilmuwan, peneliti, dan insinyurnya berdedikasi pada penemuan teknologi transformatif dan pengembangan terobosan ilmiah yang akan menjamin masa depan masyarakat kita. Awal tahun ini, TII mulai melatih LLM sumber terbuka yang canggih dan menggunakan infrastruktur, peralatan, dan keahlian SageMaker untuk menyelesaikan pekerjaannya (untuk mempelajari lebih lanjut tentang bagaimana model ini dilatih di SageMaker , mengacu pada Technology Innovation Institute melatih model fondasi Falcon LLM 40B yang canggih di Amazon SageMaker). Hasil dari upaya ini adalah TII Falcon LLM.

Dilatih dengan 1 triliun token, Falcon menawarkan kinerja terbaik melawan Harness Evaluasi Model Bahasa Eleuther AI dan saat ini berada di peringkat #1 di Papan peringkat Wajah Memeluk untuk ketepatan. Model ini tersedia dalam dua ukuran berbedaโ€”Falcon-40B dan Falcon-7Bโ€”dan dapat digunakan untuk performa canggih dalam aplikasi seperti pemahaman bahasa, pengalaman percakapan, dan bantuan menulis otomatis. Postingan ini akan membantu Anda mulai menerapkan Falcon di SageMaker untuk inferensi akurasi tinggi di jenis domain ini.

DLC inferensi model besar SageMaker menyederhanakan hosting LLM

Hosting LLM seperti Falcon-40B dan Falcon-7B dapat menjadi tantangan. Model yang lebih besar seringkali lebih akurat karena mencakup miliaran parameter, namun ukurannya juga dapat mengakibatkan latensi inferensi lebih lambat atau throughput yang lebih buruk. Hosting LLM memerlukan lebih banyak memori GPU dan kernel yang dioptimalkan untuk mencapai kinerja yang dapat diterima. Yang lebih rumit lagi, meskipun model yang lebih kecil seperti Falcon-7B umumnya dapat ditampung pada satu GPU seperti instans NVIDIA A10G yang mendukung tipe instans AWS G5, model yang lebih besar seperti Falcon-40B tidak dapat memuatnya. Jika hal ini terjadi, strategi seperti paralelisme tensor harus digunakan untuk membagi model yang lebih besar menjadi beberapa bagian dan memanfaatkan memori beberapa GPU. Solusi hosting lama yang digunakan untuk model yang lebih kecil biasanya tidak menawarkan fungsi seperti ini, sehingga menambah kesulitan.

Wadah pembelajaran mendalam (DLC) inferensi model besar (LMI) SageMaker dapat membantu. DLC LMI adalah solusi ujung ke ujung yang lengkap untuk menampung LLM seperti Falcon-40B. Di bagian depan, mereka menyertakan server model berkinerja tinggi (DJL Serving) yang dirancang untuk inferensi model besar dengan fitur seperti streaming token dan replikasi model otomatis dalam sebuah instans untuk meningkatkan throughput. Di bagian backend, DLC LMI juga menyertakan beberapa mesin paralel model berperforma tinggi, seperti DeepSpeed โ€‹โ€‹dan FasterTransformer, yang dapat membagi dan mengelola parameter model di beberapa GPU. Mesin ini juga menyertakan kernel yang dioptimalkan untuk model transformator populer, yang dapat mempercepat inferensi hingga tiga kali lebih cepat. Dengan DLC LMI, Anda hanya perlu membuat file konfigurasi untuk memulai hosting LLM di SageMaker. Untuk mempelajari lebih lanjut tentang DLC โ€‹โ€‹LMI SageMaker, lihat Paralelisme model dan inferensi model besar dan kami daftar gambar yang tersedia. Anda juga dapat melihat postingan kami sebelumnya tentang hosting Bloom-175B di SageMaker menggunakan DLC LMI.

Ikhtisar solusi

Posting ini memandu Anda tentang cara menghosting Falcon-40B menggunakan DeepSpeed โ€‹โ€‹di SageMaker menggunakan DLC LMI. Falcon-40B mengharuskan kita menggunakan beberapa GPU A10, sedangkan Falcon-7B hanya membutuhkan satu GPU. Kami juga telah menyiapkan contoh yang dapat Anda referensikan untuk menghosting Falcon-40B dan Falcon-7B menggunakan DeepSpeed โ€‹โ€‹dan Accelerate. Anda dapat menemukan contoh kode kami di GitHub.

Contoh ini dapat dijalankan di instance notebook SageMaker atau Studio Amazon SageMaker buku catatan. Untuk hosting Falcon-40B menggunakan LMI dan DeepSpeed, kita perlu menggunakan instance ml.g5.24xlarge. Instans ini menyediakan 4x GPU NVIDIA A10G, yang masing-masing mendukung memori GPU 96 GiB. Selain itu, host menyediakan 96 vCPU dan memori host 384 GiB. Kontainer LMI akan membantu mengatasi sebagian besar beban berat yang tidak terdiferensiasi terkait dengan hosting LLM, termasuk mengunduh model dan mempartisi artefak model sehingga parameter penyusunnya dapat tersebar di beberapa GPU.

Kuota untuk instans pembelajaran mesin (ML) SageMaker dapat bervariasi antar akun. Jika Anda menerima pesan kesalahan yang menunjukkan bahwa Anda telah melampaui kuota untuk instans g5.24xlarge saat mengikuti postingan ini, Anda dapat meningkatkan batas tersebut melalui Konsol Kuota Layanan.

Panduan buku catatan

Untuk memulai, kita mulai dengan menginstal dan mengimpor dependensi yang diperlukan untuk contoh kita. Kami menggunakan Boto3 SDK serta SageMaker SDK. Perhatikan bahwa kami menggunakan Layanan Penyimpanan Sederhana Amazon (Amazon S3) untuk menyimpan artefak model yang kami perlukan agar SageMaker dan LMI dapat digunakan, jadi kami menyiapkan variabel awalan S3 yang sesuai. Lihat kode berikut:

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

Kami kemudian membuat folder lokal untuk ruang kerja kami untuk menyimpan artefak model kami:

!mkdir -p code_falcon40b_deepspeed

Pertama-tama kita membuat a serving.properties file konfigurasi di direktori lokal yang kita buat. Ini serving.properties file menunjukkan ke wadah LMI dan pustaka DJL Serving front-end model paralelisasi dan mesin optimasi inferensi yang ingin kita gunakan. Anda dapat menemukan opsi konfigurasi untuk DeepSpeed โ€‹โ€‹dan Hugging Face Accelerate di Konfigurasi dan pengaturan. Di sini, perhatikan bahwa kami mengatur option.model_id parameter untuk menentukan model Wajah Pelukan mana yang akan dipilih. SageMaker membuat bekerja dengan model Hugging Face menjadi sederhana, dan hanya satu baris ini yang Anda perlukan. Selain itu, kami menetapkan option.tensor_parallel_degree ke nilai 4 karena kami memiliki empat GPU pada instance ml.g5.24xlarge kami. Parameter ini menentukan berapa banyak partisi model yang akan dibuat dan didistribusikan. Perhatikan bahwa jika kita telah menggunakan instance yang lebih besar dengan delapan GPU, seperti ml.g5.48xlarge, dan masih menetapkan nilai 4, maka LMI akan secara otomatis membuat dua replika model (masing-masing dua replika tersebar di empat GPU). Lihat kode berikut:

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

Anda juga bisa menukarnya tiiuae/falcon-40b dengan tiiuae/falcon-40b-instruct jika itu sesuai dengan kebutuhan Anda lebih baik.

Kami juga menyertakan a requirements.txt file yang dapat Anda tentukan untuk menginstal paket yang Anda perlukan:

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

Hal terakhir yang kita butuhkan adalah model.py file yang akan digunakan dengan model Anda:

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

Itu dia! Pada titik ini, kami telah membuat semua artefak yang Anda perlukan untuk menerapkan Falcon-40B dengan DeepSpeed! Kami mengemas direktori ke dalam file *.tar.gz dan mengunggahnya ke Amazon S3. Perhatikan bahwa model sebenarnya belum diunduh atau dikemas ke dalam file ini. Kontainer LMI akan mengunduh model untuk Anda langsung dari Hugging Face. Anda juga memiliki opsi untuk menargetkan bucket S3 jika Anda ingin salinan model Anda sendiri di lokasi yang memiliki performa lebih baik untuk diunduh. LMI juga menyertakan optimasi untuk mengunduh dari Amazon S3 dengan kinerja tinggi. Lihat kode berikut:

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

Yang perlu dilakukan saat ini hanyalah mendefinisikan container yang ingin kita gunakan dan membuat objek model:

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

Kemudian kita membuat konfigurasi endpoint dan membuat endpoint:


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

Item konfigurasi yang perlu diingat untuk hosting yang sukses

Pertimbangan penting untuk hosting model besar adalah memastikan tersedianya waktu yang cukup untuk mengunduh model dari Hugging Face. Dalam pengujian kami, Falcon-40B membutuhkan waktu sekitar 90 menit untuk diunduh ke instance tersebut. Satu set konfigurasi utama yang memungkinkan hal ini adalah ContainerStartupHealthCheckTimeoutInSeconds dan ModelDataDownloadTimeoutInSeconds. Pastikan konfigurasi titik akhir SageMaker memiliki nilai 3600 untuk masing-masing konfigurasi tersebut. Selain itu, jauh lebih mudah untuk mengunduh dari Amazon S3 dibandingkan dari kebun binatang model asli menggunakan wadah LMI yang dirancang khusus untuk LLMS yang menggunakan utilitas S5cmd, yang memotong waktu pengunduhan model menjadi sekitar 10 menit.

Anda dapat memantau status titik akhir dengan menelepon DescribeEndpoint, yang akan memberi tahu Anda ketika semuanya sudah selesai. Titik akhir Anda sekarang siap merespons permintaan inferensi! Karena LMI menangani partisi dan orkestrasi model untuk Anda, setiap permintaan akan diproses menggunakan keempat GPU yang tersedia di instance ml.g4xlarge kami. Hal ini memungkinkan kami menghosting LLM dan meningkatkan kinerja jika Anda menskalakan akselerator GPU secara horizontal. Lihat kode berikut:

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

Jika Anda sudah selesai dan ingin menghapus konfigurasi endpoint, endpoint, dan objek model, Anda dapat menjalankan perintah berikut:

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

Kode yang kami referensikan dalam posting ini dapat ditemukan secara lengkap buku catatan di GitHub.

Kesimpulan

SageMaker Hosting dan DLC LMI memudahkan Anda menghosting LLM seperti Falcon-40B. Dibutuhkan beban berat yang tidak dapat dibedakan dalam mengatur apa yang diperlukan untuk meng-host model di beberapa GPU dan memberikan opsi yang dapat dikonfigurasi sesuai dengan kebutuhan Anda. Selain itu, penggunaan model Hugging Face menjadi sangat mudah, dengan dukungan bawaan untuk model ini.

Dalam postingan ini, kami menunjukkan bagaimana Anda dapat menggunakan SageMaker untuk menghosting model Falcon-40B menggunakan DeepSpeed. Selain itu, kami memberikan contoh di GitHub untuk menjadi tuan rumah Falcon-40B menggunakan Accelerate, dan model Falcon-7B yang lebih kecil. Kami mendorong Anda untuk mencobanya di SageMaker dengan LMI dan dapatkan pengalaman langsung dengan LLM publik dengan kinerja terbaik hingga saat ini!


Tentang penulis

Terapkan Falcon-40B dengan DLC inferensi model besar di Amazon SageMaker | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.James Taman adalah Arsitek Solusi di Amazon Web Services. Dia bekerja dengan Amazon.com untuk merancang, membangun, dan menerapkan solusi teknologi di AWS, dan memiliki minat khusus pada AI dan pembelajaran mesin. Di waktu senggangnya, dia senang mencari budaya baru, pengalaman baru, dan tetap up to date dengan tren teknologi terkini. Anda dapat menemukannya di LinkedIn.

Terapkan Falcon-40B dengan DLC inferensi model besar di Amazon SageMaker | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Abhi Shivaditya adalah Arsitek Solusi Senior di AWS, bekerja dengan organisasi perusahaan global strategis untuk memfasilitasi penerapan layanan AWS di berbagai bidang seperti Kecerdasan Buatan, komputasi terdistribusi, jaringan, dan penyimpanan. Keahliannya terletak pada Deep Learning dalam domain Natural Language Processing (NLP) dan Computer Vision. Abhi membantu pelanggan dalam menerapkan model pembelajaran mesin berkinerja tinggi secara efisien dalam ekosistem AWS.

Terapkan Falcon-40B dengan DLC inferensi model besar di Amazon SageMaker | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Robert Van Dusen adalah Manajer Produk Senior dengan Amazon SageMaker. Dia memimpin pengoptimalan model pembelajaran mendalam untuk aplikasi seperti inferensi model besar.

Terapkan Falcon-40B dengan DLC inferensi model besar di Amazon SageMaker | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Evandro Franco adalah Arsitek Solusi Spesialis AI/ML yang bekerja di Amazon Web Services. Dia membantu pelanggan AWS mengatasi tantangan bisnis terkait AI/ML di atas AWS. Dia memiliki pengalaman lebih dari 15 tahun bekerja dengan teknologi, mulai dari pengembangan perangkat lunak, infrastruktur, tanpa server, hingga pembelajaran mesin.

Terapkan Falcon-40B dengan DLC inferensi model besar di Amazon SageMaker | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Qinglan adalah Insinyur Pengembangan Perangkat Lunak di AWS. Dia telah mengerjakan beberapa produk yang menantang di Amazon, termasuk solusi inferensi ML kinerja tinggi dan sistem logging kinerja tinggi. Tim Qing berhasil meluncurkan model Billion-parameter pertama di Amazon Advertising dengan latensi yang sangat rendah. Qing memiliki pengetahuan mendalam tentang pengoptimalan infrastruktur dan akselerasi Deep Learning.

Terapkan Falcon-40B dengan DLC inferensi model besar di Amazon SageMaker | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Frank Liu adalah Insinyur Perangkat Lunak untuk AWS Deep Learning. Dia berfokus pada membangun alat pembelajaran mendalam yang inovatif untuk insinyur perangkat lunak dan ilmuwan. Di waktu luangnya, dia menikmati hiking bersama teman dan keluarga.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS