如何使用 Docker 在 AWS Lambda 上部署機器學(xué)習模型
在本教程中,我們將引導(dǎo)您完成將 ML 模型打包為 Docker 容器并將其部署在無服務(wù)器計算服務(wù) AWS Lambda 上的過程。
在本教程結(jié)束時,您將擁有一個可以通過 API 調(diào)用的工作 ML 模型,并且您將對如何在云上部署 ML 模型有更深入的了解。無論您是機器學(xué)習工程師、數(shù)據(jù)科學(xué)家還是開發(fā)人員,本教程旨在讓對 ML 和 Docker 有基本了解的任何人都可以訪問。那么,讓我們開始吧!
什么是Docker?
碼頭工人是一種旨在使使用容器更輕松地創(chuàng)建、部署和運行應(yīng)用程序的工具。容器允許開發(fā)人員將應(yīng)用程序及其所需的所有部分打包在一起,例如庫和其他依賴項,并將其作為一個包發(fā)送出去。通過使用容器,開發(fā)人員可以確保他們的應(yīng)用程序?qū)⒃谌魏纹渌麢C器上運行,而不管機器可能具有的任何自定義設(shè)置可能與用于編寫和測試代碼的機器不同。Docker 提供了一種將應(yīng)用程序及其依賴項打包到輕量級、可移植容器中的方法,該容器可以輕松地從一個環(huán)境移動到另一個環(huán)境。這使得創(chuàng)建一致的開發(fā)、測試和生產(chǎn)環(huán)境以及更快速、更可靠地部署應(yīng)用程序變得更加容易。從這里安裝 Docker:https://docs.docker.com/get-docker/。
什么是 AWS Lambda?
Amazon Web Services (AWS) Lambda是一個無服務(wù)器計算平臺,它運行代碼以響應(yīng)事件并自動為您管理底層計算資源。它是 AWS 提供的一項服務(wù),允許開發(fā)人員在云中運行他們的代碼,而不必擔心運行代碼所需的基礎(chǔ)設(shè)施。AWS Lambda 會自動擴展您的應(yīng)用程序以響應(yīng)傳入的請求流量,您只需為消耗的計算時間付費。這使其成為構(gòu)建和運行微服務(wù)、實時數(shù)據(jù)處理和事件驅(qū)動應(yīng)用程序的有吸引力的選擇。
什么是 AWS ECR?
Amazon Web Services (AWS) Elastic Container Registry (ECR) 是一個完全托管的 Docker 容器注冊表,可讓開發(fā)人員輕松存儲、管理和部署 Docker 容器映像。它是一種安全且可擴展的服務(wù),使開發(fā)人員能夠在 AWS 云中存儲和管理 Docker 映像,并輕松地將它們部署到 Amazon Elastic Container Service (ECS) 或其他基于云的容器編排平臺。ECR 與其他 AWS 服務(wù)集成,例如 Amazon ECS 和 Amazon EKS,并為 Docker 命令行界面 (CLI) 提供本地支持。這使得使用熟悉的 Docker 命令從 ECR 推送和拉取 Docker 映像以及自動化構(gòu)建、測試和部署容器化應(yīng)用程序的過程變得容易。
安裝 AWS CLI
使用這個在您的系統(tǒng)上安裝 AWS CLI 。通過在您的 AWS 賬戶中創(chuàng)建 IAM 用戶來獲取 AWS 訪問密鑰 ID 和 AWS 秘密訪問密鑰。安裝后,運行以下命令配置您的 AWS CLI 并插入必填字段。
使用 Docker 部署 Lambda 函數(shù)
我們將在本教程中部署 OpenAI 剪輯模型來矢量化輸入文本。Lambda 函數(shù)需要 Docker 容器中的 amazon Linux 2,因此我們使用
public.ecr.aws/lambda/python:3.8。此外,由于 Lambda 具有只讀文件系統(tǒng),它不允許我們在內(nèi)部下載模型,因此我們需要在創(chuàng)建映像時下載并復(fù)制它們。
從這里獲取工作代碼并提取它。
更改 Dockerfile 所在的工作目錄,然后運行以下命令:
現(xiàn)在我們已經(jīng)準備好要在 Lambda 上部署的映像。要在本地檢查它,請運行命令:
要檢查它,向它發(fā)送一個 curl 請求,它應(yīng)該返回輸入文本的向量:
輸出

先將鏡像部署到Lambda上,我們需要將其推送到ECR上,因此登錄AWS賬戶,在ECR中創(chuàng)建倉庫lambda_image。創(chuàng)建存儲庫后,轉(zhuǎn)到創(chuàng)建的存儲庫,您將看到視圖推送命令選項單擊它,您將獲得將圖像推送到存儲庫的命令。

現(xiàn)在運行第一個命令以使用 AWS CLI 對您的 Docker 客戶端進行身份驗證。
我們已經(jīng)創(chuàng)建了 Docker 鏡像,因此跳過第二步并運行第三條命令來標記創(chuàng)建的鏡像。
運行最后一條命令將鏡像推送到 ECR 中。運行后你會看到界面是這樣的:

推送完成后,您將在 ECR 的存儲庫中看到帶有“:latest”標簽的圖像。

復(fù)制圖像的 URI。我們在創(chuàng)建 Lambda 函數(shù)時需要它。
現(xiàn)在轉(zhuǎn)到 Lambda 函數(shù)并單擊“創(chuàng)建函數(shù)”選項。我們正在從圖像創(chuàng)建一個函數(shù),因此選擇容器圖像的選項。添加函數(shù)名稱并粘貼我們從 ECR 復(fù)制的 URI,或者您也可以瀏覽圖像。選擇architecture x84_64,最后點擊create_image選項。
構(gòu)建 Lambda 函數(shù)可能需要一些時間,請耐心等待。執(zhí)行成功后,你會看到如下界面:

Lambda 函數(shù)默認有 3 秒的超時限制和 128 MB 的 RAM,所以我們需要增加它,否則它會拋出錯誤。為此,請轉(zhuǎn)到配置選項卡并單擊“編輯”。

現(xiàn)在將超時設(shè)置為 5-10 分鐘(最大限制為 15 分鐘)并將 RAM 設(shè)置為 2-3 GB,然后單擊保存按鈕。更新 Lambda 函數(shù)的配置需要一些時間。

更新更改后,該功能就可以進行測試了。要測試 lambda 函數(shù),請轉(zhuǎn)到“測試”選項卡并將鍵值添加到事件 JSON 中作為文本:“這是文本編碼測試?!?然后點擊測試按鈕。

由于我們是第一次執(zhí)行 Lambda 函數(shù),因此執(zhí)行可能需要一些時間。成功執(zhí)行后,您將在執(zhí)行日志中看到輸入文本的向量。

現(xiàn)在我們的 Lambda 函數(shù)已部署并正常工作。要通過 API 訪問它,我們需要創(chuàng)建一個函數(shù) URL。
要為 Lambda 函數(shù)創(chuàng)建 URL,請轉(zhuǎn)到 Configuration 選項卡并選擇 Function URL 選項。然后單擊創(chuàng)建函數(shù) URL 選項。

現(xiàn)在,保留身份驗證 None 并單擊 Save。

該過程完成后,您將獲得用于通過 API 訪問 Lambda 函數(shù)的 URL。以下是使用 API 訪問 Lambda 函數(shù)的示例 Python 代碼:
成功執(zhí)行代碼后,您將獲得輸入文本的向量。

所以這是一個如何使用 Docker 在 AWS Lambda 上部署 ML 模型的示例。如果您有任何疑問,請告訴我們。



























