През 2023 г. са публикувани много усъвършенствани LLM с отворен код, но внедряването на тези модели на ИИ в производството все още е техническо предизвикателство. В тази статия ще ви покажем как да внедрите някои от най-добрите LLM в AWS EC2: LLaMA 3 70B, Mistral 7B и Mixtral 8x7B. Ще използваме усъвършенстван двигател за изводи, който поддържа пакетни изводи, за да увеличим максимално пропускателната способност: vLLM.
Meta създаде и пусна на пазара серията големи езикови модели (LLM) LLaMA 3, която включва различни генеративни текстови модели, които са предварително обучени и настроени. Тези модели се различават по размер, като параметрите им варират между 7 и 70 милиарда.
Mistral AI, стартъп, съоснован от хора с опит в DeepMind и Meta на Google, навлезе значително в света на LLM с Mistral 7B и след това Mixtral 8x7B.
Това, което прави Mistral 7B особено впечатляващ, е неговата производителност. В различни тестове той надминава Llama2-13B и дори Llama1-34B по много показатели. Това предполага, че Mistral 7B предоставя сходни или по-добри възможности при значително по-ниски изчислителни разходи. Когато става въпрос за задачи за кодиране, Mistral 7B се конкурира с CodeLlama 7B, а компактният му размер от 13,4 GB му позволява да работи на стандартни машини.
Mixtral 8x7B е адаптивен и бърз модел, подходящ за различни приложения. Той работи със скорост, която е шест пъти по-висока, и отговаря или надминава производителността на LLaMA 3 70B по всички тестови показатели. Този модел поддържа множество езици и притежава присъщи възможности за кодиране. Той може да управлява последователности с дължина до 32 хил. лексеми.
Всички тези модели са с отворен код и можете да ги внедрите на собствения си сървър, ако успеете да получите достъп до подходящия хардуер. Нека да видим как да ги внедрим в AWS EC2 с vLLM.
vLLM е бърза и лесна за използване библиотека, пригодена за ефективно извеждане и внедряване на LLM. Производителността на vLLM се дължи на няколко усъвършенствани техники, като странично внимание за ефективно управление на ключовете и стойностите на паметта за внимание, пакетна обработка на входящи заявки в реално време и персонализирани CUDA ядра.
Освен това vLLM предлага добра гъвкавост чрез разпределен извод (чрез тензорен паралелизъм), поточно предаване на изхода и адаптиране към архитектури на графични процесори NVIDIA и AMD.
По-специално vLLM ще бъде много полезен за внедряването на LLaMA 3, Mistral и Mixtral, тъй като ще ни позволи да внедряваме моделите си в инстанции AWS EC2, в които са вградени няколко по-малки графични процесора (като NVIDIA A10), вместо един голям графичен процесор (като NVIDIA A100 или H100). Освен това vLLM ще ни позволи да увеличим значително производителността на нашия модел благодарение на пакетното извеждане.
Внедряването на LLM е предизвикателство по много причини: Използване на VRAM (паметта на графичния процесор), скорост на изводите, пропускателна способност, използване на дисково пространство... Тук трябва да се уверим, че ще осигурим GPU инстанция в AWS EC2, която има достатъчно VRAM за изпълнение на нашите модели.
Екземплярите G5 са добър избор, тъй като ви дават достъп до съвременни графични процесори NVIDIA A10 и могат да се мащабират до 192 GB VRAM (вж. екземпляра g5.48xlarge), като същевременно остават доста рентабилни.
Mistral 7B е най-лесният за внедряване модел, тъй като изисква около 14 GB VRAM. След това се нареждат Mixtral 8x7B със 110 GB и LLaMA 3 70B със 140 GB. Тук разглеждаме само fp16, а не fp32, и не прилагаме никакъв вид квантуване.
Следователно Mistral 7B може да работи на инстанция g5.xlarge, но Mixtral 8x7B и LLaMA 3 70B изискват инстанция g5.48xlarge, така че в този урок ще осигурим инстанция g5.48xlarge.
За да осигурите такива екземпляри, влезте в конзолата на AWS EC2 и стартирайте нов екземпляр: изберете NVIDIA deep learning AMI за екземпляр g5.48xlarge. Ще ви е необходимо поне 300 GB дисково пространство.
Инсталирането на vLLM е съвсем просто. Нека да отворим SSH връзка към новосъздадената инстанция на AWS и да инсталираме vLLM с pip:
pip install vllm
Тъй като ще използваме vLLM за разпределен извод на 8 x A10 графични процесора, трябва да инсталираме и Ray:
pip install ray
В случай на проблеми със съвместимостта по време на процеса на инсталиране може да ви е по-лесно да изградите vLLM от изходния код или да използвате техния образ за Docker: вижте документацията за инсталация за повече подробности.
Сега можете да създадете първия си скрипт за извод. Създайте файл на Python, който съдържа следното:
from vllm import LLM
# Replace the model name with the one you want to use:
# Mixtral simple: mistralai/Mixtral-8x7B-v0.1
# Mixtral instruct: mistralai/Mixtral-8x7B-Instruct-v0.1
# Mistral 7B simple: mistralai/Mistral-7B-v0.1
# Mistral 7B instruct: mistralai/Mistral-7B-Instruct-v0.1
# LLaMA 3 70B: meta-llama/Llama-2-70b-hf
llm = LLM("mistralai/Mixtral-8x7B-Instruct-v0.1", tensor_parallel_size=8)
print(llm.generate("What is batch inference?"))
Сега стартирайте скрипта си с Python, който връща нещо подобно:
Batch inference is the process of applying machine learning models to a batch of data inputs all at once, rather than processing each input individually in real-time. In batch inference, a large set of inputs is collected and then processed together as a group, or "batch," by the machine learning model.
Batch inference is often used in scenarios where real-time predictions are not required, and where there is a large volume of data that needs to be processed. It can be more efficient and cost-effective than real-time inference, as it allows for the efficient use of computing resources and can reduce the latency associated with processing individual inputs.
Batch inference is commonly used in applications such as image recognition, natural language processing, and predictive analytics. For example, a company might use batch inference to analyze customer data and generate insights about purchasing patterns, or to analyze sensor data from industrial equipment to identify potential maintenance issues.
In summary, batch inference is the process of applying machine learning models to a batch of data inputs all at once, as an alternative to real-time inference. It is commonly used in scenarios where real-time predictions are not required and where there is a large volume of data that needs to be processed efficiently.
Както виждате, това е лесна задача. Трябва да адаптирате tensor_parallel_size в зависимост от броя на основните графични процесори, с които разполагате.
Горният сценарий беше еднократен. Сега искаме да стартираме подходящ сървър за изводи, който може да обработва множество заявки и да извършва пакетни изводи в движение. Първо, стартирайте сървъра:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8
След известно време, след като моделът е правилно зареден във VRAM, можете да отворите втори прозорец на обвивката и да направите някои заявки:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
"prompt": "What is batch inference?"
}'
Това ще върне същия резултат като преди, но този път можете да извършите няколко заявки едновременно.
Използването на усъвършенстван сървър за изводи като vLLM е полезно, ако искате да използвате максимално графичния процесор и лесно да разгърнете модела си паралелно на няколко графични процесора.
Както можете да видите, благодарение на тази техника е доста лесно да внедрите най-усъвършенстваните модели на изкуствен интелект с отворен код, като LLaMA 3, Mistral и Mixtral, на собствения си сървър.
В този урок използвахме AWS EC2, но, разбира се, можехме да използваме и други доставчици. Основното предизвикателство ще бъде цената на графичните процесори, както и тяхната наличност.
Ако не искате сами да внедрявате такива LLM, препоръчваме ви да използвате нашия NLP Cloud API. Това ще ви спести много време и дори може да е по-евтино от внедряването на собствени LLM. Ако все още не сте го направили, не се колебайте да опитате!
Vincent
Застъпник на разработчиците в NLP Cloud