Въведение

Добре дошли в нашия урок за внедряване на модел за машинно обучение (ML) на Amazon Web Services (AWS) Lambda с помощта на Docker. В този урок ще ви преведем през процеса на опаковане на ML модел като Docker контейнер и внедряването му в AWS Lambda, компютърна услуга без сървър.

До края на този урок ще имате работещ ML модел, който можете да извикате чрез API, и ще придобиете по-задълбочено разбиране за това как да разположите ML модели в облака. Независимо дали сте инженер по машинно обучение, учен по данни или разработчик, този урок е предназначен да бъде достъпен за всеки с основни познания за ML и Docker. И така, да започваме!

Какво е Docker?

Docker е инструмент, предназначен да улесни създаването, внедряването и стартирането на приложения с помощта на контейнери. Контейнерите позволяват на разработчика да опакова приложение с всички части, от които се нуждае, като библиотеки и други зависимости, и да го изпрати като един пакет. Използвайки контейнери, разработчиците могат да бъдат сигурни, че тяхното приложение ще работи на всяка друга машина, независимо от всички персонализирани настройки, които машината може да има, които могат да се различават от машината, използвана за писане и тестване на кода. Docker предоставя начин за пакетиране на приложение и неговите зависимости в лек, преносим контейнер, който може лесно да бъде преместван от една среда в друга. Това улеснява създаването на последователни среди за разработка, тестване и производство и по-бързото и надеждно внедряване на приложения. Инсталирайте докера от https://docs.docker.com/get-docker/

Какво е AWS Lambda?

Amazon Web Services (AWS) Lambda е изчислителна платформа без сървър, която изпълнява код в отговор на събития и автоматично управлява основните изчислителни ресурси вместо вас. Това е услуга, предлагана от AWS, която позволява на разработчиците да изпълняват кода си в облака, без да се притесняват за инфраструктурата, необходима за изпълнението му. AWS Lambda автоматично мащабира вашите приложения в отговор на входящия трафик на заявки и вие плащате само за компютърното време, което консумирате. Това го прави привлекателна опция за изграждане и стартиране на микроуслуги, обработка на данни в реално време и приложения, управлявани от събития.

Какво е AWS ECR?

Amazon Web Services (AWS) Elastic Container Registry (ECR) е напълно управляван регистър на контейнери на Docker, който улеснява разработчиците да съхраняват, управляват и внедряват изображения на контейнери на Docker. Това е сигурна и мащабируема услуга, която позволява на разработчиците да съхраняват и управляват Docker изображения в облака на AWS и лесно да ги внедряват в Amazon Elastic Container Service (ECS) или други платформи за оркестрация на контейнери, базирани на облак. ECR е интегриран с други услуги на AWS, като Amazon ECS и Amazon EKS, и предоставя естествена поддръжка за интерфейса на командния ред на Docker (CLI). Това улеснява избутването и изтеглянето на Docker изображения от ECR с помощта на познати Docker команди и автоматизирането на процесите на изграждане, тестване и внедряване на приложения в контейнери.

Инсталирайте AWS-CLI

Инсталирайте AWS CLI на вашата система, като използвате това. Вземете ID на ключа за достъп до AWS и секретния ключ за достъп до AWS, като създадете IAM потребител във вашия акаунт в AWS. След инсталирането изпълнява командата по-долу, за да конфигурирате вашия AWS CLI и да вмъкнете задължителните полета.

aws  configure

Внедряване на ламбда функция с докер

Ние внедряваме openAI клип модела в този урок, за да векторизираме въведения текст. Функцията lambda изисква amazon Linux 2 в докер контейнера, така че ние използваме public.ecr.aws/lambda/python:3.8 с нея. Освен това, тъй като lambda има файлова система само за четене, тя няма да ни позволи да изтеглим моделите вътрешно, така че трябва да ги изтеглим и копираме, докато създаваме изображението.

Вземете работния код от тук и го извлечете.

Променете работната директория, където се намира Dockerfile и изпълнете командата по-долу;

docker build -t lambda_image .

Сега имаме готово изображение, което ще разположим на ламбда. За да го проверите локално, изпълнете командата:

docker run -p 9000:8080 lambda_image

За да го проверите, изпратете му curl заявка и той трябва да върне векторите за въведения текст,

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"text": "This is a test for text encoding"}'

Изход:

За да разположим изображението на lambda, първо трябва да го изпратим на ECR, така че влезте в акаунта на AWS и създайте хранилището lambda_image в ECR. След като създадете хранилището, отидете в създаденото хранилище и ще видите опцията за команда за извеждане, щракнете върху нея и ще получите командата за избутване на изображението в хранилището.

Сега изпълнете първата команда, за да удостоверите вашия докер клиент с помощта на AWS CLI.

Вече създадохме докер изображението, така че пропуснете втората стъпка и изпълнете третата команда, за да маркирате създаденото изображение.

Изпълнете последната команда, за да натиснете изображението в ECR, ще видите интерфейса като този, след като го стартирате:

След като натискането приключи, ще видите изображението, маркирано с етикет „:latest“ в хранилището на ECR.

Копирайте URI на изображението, от което ще се нуждаем, докато създаваме ламбда функцията.

Сега отидете на ламбда функцията и щракнете върху опцията за създаване на функция. Създаваме функция от изображението, така че изберете опцията за изображението на контейнера. Добавете името на функцията и поставете URI, който копирахме от ECR, или можете да прегледате и изображението. Изберете архитектура x84_64 и накрая щракнете върху опцията create_image.

Може да отнеме известно време за изграждане на ламбда функцията, така че бъдете търпеливи. След успешно изпълнение ще видите интерфейс като по-долу:

Ламбда функцията има лимит за изчакване от 3 секунди и RAM от 128 MB по подразбиране, така че трябва да го увеличим, в противен случай ще ни изведе грешка. За да го направите, отидете в раздела за конфигурация и щракнете върху редактиране.

Сега задайте времето за изчакване на 5–10 минути (максималното ограничение е 15 минути) и RAM на 2–3 GB и щракнете върху бутона за запазване. Актуализирането на конфигурацията на ламбда функцията ще отнеме известно време.

След актуализиране на промените функцията е готова за тестване. За да тествате ламбда функцията, отидете в раздела Тест и добавете ключовата стойност в събитието-JSON като „текст“: „Това е тест за кодиране на текст“. След това щракнете върху бутона за тестване.

Тъй като изпълняваме ламбда функцията за първи път, може да отнеме известно време за изпълнение, след успешното изпълнение ще видите векторите за въведения текст в регистрационните файлове за изпълнение.

Сега нашата ламбда функция е разгърната и работи правилно. За достъп до него чрез API ще трябва да създадем URL адрес на функция.

За да създадете URL адреса за ламбда функцията, отидете в раздела Конфигурация и изберете опцията URL адрес на функцията. След това щракнете върху опцията за създаване на URL адрес на функция.

Засега запазете удостоверяването None и щракнете върху Save.

След приключване на процеса ще получите URL адреса за достъп до ламбда функцията чрез API. Ето примерния код на Python за достъп до ламбда функцията чрез API:

import requests
 
function_url = ""
url = f"{function_url}?text=this is test text"
 
payload={}
headers = {}
 
response = requests.request("GET", url, headers=headers, data=payload)
 
print(response.text)

След успешното изпълнение на кода ще получите вектора за въведения текст.

Така че това беше примерът за това как да разположите ml модели на AWS lambda с помощта на докер. Уведомете ни, ако имате някакви въпроси.

Първоначално публикувано вHow To Deploy Machine Learning Models On AWS Lambda Using Docker на 12 януари 2023 г.