在本指南中,你将了解在亚马逊EC2服务中部署ML模型应用程序的步骤。这里的ML应用是基于flask的。然而,同样的步骤和想法也可以用于托管与其他类似应用程序构建的应用程序。
请注意,我们将不涉及如何建立一个ML模型。相反,你将使用现成的代码来训练ML模型,并将其直接存储为一个pickle文件。本指南的目的是作为一个指南,全面解释如何在AWS EC2实例中从头开始托管一个已经运行的ML模型应用程序。
下面是你需要做的步骤的简介。
在AWS EC2中部署你的ML应用的步骤
以下是我们将遵循的步骤,以便从AWS EC2托管和服务ML模型。
第1步。 下载代码。然后,在本地建立你的ML模型,并将其作为一个flask应用程序启动。我们将使用这个模型并将其托管在AWS EC2中。
第2步。 在AWS中启动一个EC2实例。一个免费级别的实例对于演示目的来说已经足够了。
第3步。 使用ssh连接到AWS EC2实例
第4步。 使用安全拷贝(Scp)将你的文件移到AWS EC2上
第5步。 安装必要的软件包并运行app.py来启动应用程序。
现在你可以通过浏览器访问你在创建EC2实例时得到的指定URL中的应用程序。
前提条件
-
AWS账户。如果你没有,你可以在这里创建它。你将需要一张信用卡来创建一个,然而,为了部署你的模型,我们将使用一个免费层级的实例,这将不会产生费用。
-
你将需要安装有IDE的Python,以便在本地构建、调试和提供你的应用程序。推荐Anaconda来做这个。
第1步:在你的本地电脑上运行ML flask应用程序
- 下载代码目录压缩文件并解压内容。
- 打开终端或命令提示符,改变目录到代码文件夹。`cd downloaded_code_directory`。
- 运行`python app.py`。
如果一切顺利,上述步骤将启动一个flask应用,并给出一个本地URL来访问该应用。访问该URL以访问你的应用程序屏幕。
第2步:在AWS上启动一个免费级别的微型实例
在创建AWS账户后,启动一个免费层级的EC2实例。
- 登录 从console.aws.amazon.com登录到您的AWS账户。
然后,在顶部的搜索框中搜索 "EC2"。或者你可以在 "计算 "下的服务列表中找到它。

- 启动一个EC2实例
要启动一个EC2实例,你必须经过一系列的步骤。EC2实例只不过是一台在亚马逊数据中心运行的远程计算机,我们可以租用它来托管我们的ML应用。
让我们一个一个地看一下这些步骤。
(i) 点击EC2仪表板上的启动实例按钮。
这将使你开始创建一个新的EC2实例。

(ii) 选择一个符合免费级别的AMI镜像
下面的屏幕将列出可用的EC2实例,也称为亚马逊机器图像(AMI)。选择一个 "符合免费级别 "的实例。 其他实例类型将产生费用。

(iii) 选择属于所选AMI的实例类型
在下面的屏幕中,它将要求选择实例类型,包括CPU数量、RAM、内存限制等。
对于我们的应用程序,因为我们要使用免费层,所以选择绿色的 "t2.micro" ,即一个CPU,1GB内存。 然后点击底部的 "审查和启动 " 蓝色按钮。

(iv) 审查和启动

(v) 创建一个密钥对(不要忽略)
你将会看到一个屏幕,允许你创建一个密钥对。这一步很重要。 一个密钥对是连接到你的AWS实例所需要的一个文件。你将被允许只下载一次密钥对。因此,现在就下载它,并安全地存储它。这是AWS规定的一个额外的安全层。

点击'下载密钥对'将下载一个`.pem'文件。在这种情况下,它将被称为 'free_tier_key_pair.pem'。
让我们保持这个安全。一旦下载完成,点击 'Launch Instances'。
等待几秒钟,实例将被启动。
然后,你将能够通过点击EC2仪表板上的实例按钮看到一个实时实例。我们将在这个实例中启动我们的flask应用。

接下来,让我们创建一个安全组。
(vi) 创建一个安全组
安全组可以让我们控制谁可以向服务器(实例)发送请求。
在 "网络和安全 "标签下→选择 "安全组"。然后点击'Create Security Group'来创建一个安全组。

给安全组起个名字,并保持默认。

现在,我们需要把实例的安全组改为我们刚刚创建的新组。
要做到这一点,进入 "网络和安全"→"网络接口"→右击实例并选择 "改变安全组"。

然后选择我们刚刚创建的组 (basicgroup)并点击保存。

现在我们已经准备好连接到EC2实例了。
第3步:使用ssh连接到AWS EC2实例

下面的屏幕显示了如何从你的本地计算机连接到ubuntu的AWS EC2实例的说明。

让我们开始连接。
我是在一台Windows电脑上。这个过程在linux/mac系统上也是非常相似的。
为了与远程AWS EC2实例建立连接,`cd`到包含密钥对文件的文件夹,在这种情况下是 `free_tier_key_pair.pem`。
然后,如屏幕所示,如果你在windows系统上,从你的命令提示符中键入以下命令,如果你在Mac或Linux电脑上,从终端键入:
ssh -i "free_tier_key_pair.pem" ubuntu@ec2-3-80-25-198.compute-1.amazonaws.com
在上述命令中,你将需要替换pem file 和ec2实例的网址。
然而,在大多数情况下,默认的用户名是`ubuntu`,所以你可以保持`ubuntu@ec2...`部分不变。
这将建立一个`ssh`连接到AWS EC2实例。`ssh`代表安全外壳。

现在我们已经连接到AWS的Ubuntu终端。现在你可以在你的Windows机器上开始输入ubuntu shell命令了。
接下来,我们需要将项目文件从本地计算机复制到我们租赁的远程Ubuntu机器上。
第4步:使用安全拷贝(scp)将你的文件移到AWS Ec2上
让我们把项目文件夹移到AWS。
要做到这一点,你需要在Windows命令提示符下。因此,打开一个新的命令提示符,cd到包含项目目录的文件夹,并发出以下命令,将文件安全复制到EC2实例。
scp -r -i "free_tier_key_pair.pem" ./flask_classification ubuntu@ec2-3-80-25-198.compute-1.amazonaws.com:~/
同样,你将需要更新pem文件的路径和ec2的网址。

再次ssh到远程实例,并检查你是否能在那里找到这些文件。

很好!所有的文件都被复制了。
所有的文件都被复制了。让我们安装软件包并启动应用程序。
第5步:安装必要的软件包并运行app.py来启动应用程序
sudo apt-get update
sudo apt-get -y install python3-pip
pip3 install <each of the following packages>
需要的包:
catboost
flask
scikit-learn
一旦软件包安装完毕,cd到flask_classification 目录并运行python app.py 。这应该会启动应用程序,并使其从亚马逊EC2实例中运行。
现在,你可以事实上每个人都可以从EC2实例的URL访问它。

