训练机器学习模型变得相当简单,尤其是随着预训练模型和迁移学习的兴起。好吧,有时候可能并不是那么简单,但至少,训练模型不会破坏关键应用程序,也不会让客户对您的服务质量感到不满。然而,部署模型……是的,我们都经历过。
在生产环境中部署模型通常需要经历一系列复杂的步骤。将模型打包到容器中,配置基础设施,创建预测API,保护它,扩展它,监控它等等。面对现实吧:构建所有这些基础设施会占用宝贵的时间,而这些工作并非机器学习的实际工作。不幸的是,它也可能出现严重问题。
我们努力解决这个问题,通过新推出的Hugging Face推理端点。为了使机器学习变得更简单,同时又不妥协于最先进的质量,我们构建了一个服务,让您可以在几个点击之间将机器学习模型直接部署到您最喜欢的云上的托管基础设施中。简单、安全、可扩展:您可以拥有所有这些。
让我向您展示这是如何工作的!
在推理端点上部署模型
从推理端点支持的任务列表中,我决定部署一个我最近在food101数据集上使用AutoTrain微调的Swin图像分类模型。如果您对我是如何构建这个模型感兴趣,这个视频会向您展示整个过程。
从我的模型页面开始,我点击部署
,然后选择推理端点
。
这将直接带我进入端点创建页面。
我决定在单个GPU实例上部署我模型的最新修订版,托管在AWS的eu-west-1
地区。可选地,我可以设置自动扩展,甚至可以在自定义容器中部署模型。
接下来,我需要决定谁可以访问我的端点。从最不安全到最安全,有三个选项:
- 公开:端点在公共的Hugging Face子网中运行,任何互联网上的人都可以在没有任何身份验证的情况下访问它。在选择此选项之前三思而行!
- 受保护:端点在公共的Hugging Face子网中运行,任何具有适当组织令牌的互联网上的人都可以访问它。
- 私有:端点在私有的Hugging Face子网中运行。它无法通过互联网访问,只能通过使用AWS PrivateLink创建的VPC端点在您的AWS帐户中使用。您可以控制您的AWS帐户中的哪个VPC和子网有权访问该端点。
我们首先部署一个受保护的端点,然后再部署一个私有的端点。
部署受保护的推理端点
我只需选择受保护
,然后点击创建端点
。
几分钟后,端点已经启动并运行,其URL可见。
我可以立即通过在推理小部件中上传图像来测试它。
当然,我也可以使用几行Python代码直接调用端点,并使用我的Hugging Face API令牌进行身份验证(您可以在hub上的帐户设置中找到您的令牌)。
import requests, json
API_URL = "https://oncm9ojdmjwesag2.eu-west-1.aws.endpoints.huggingface.cloud"
headers = {
"Authorization": "Bearer MY_API_TOKEN",
"Content-Type": "image/jpg"
}
def query(filename):
with open(filename, "rb") as f:
data = f.read()
response = requests.request("POST", API_URL, headers=headers, data=data)
return json.loads(response.content.decode("utf-8"))
output = query("food.jpg")
正如您所预期的那样,预测结果是相同的。
[{'score': 0.9998438358306885, 'label': 'hummus'},
{'score': 6.674625183222815e-05, 'label': 'falafel'},
{'score': 6.490697160188574e-06, 'label': 'escargots'},
{'score': 5.776922080258373e-06, 'label': 'deviled_eggs'},
{'score': 5.492902801051969e-06, 'label': 'shrimp_and_grits'}]
切换到 分析
选项卡,我可以看到终端度量。我的一些请求失败是因为我故意省略了 Content-Type
标头。
如果需要更多详细信息,我可以在 日志
选项卡中查看完整的日志。
5c7fbb4485cd8w7 2022-10-10T08:19:04.915Z 2022-10-10 08:19:04,915 | INFO | POST / | Duration: 142.76 ms
5c7fbb4485cd8w7 2022-10-10T08:19:05.860Z 2022-10-10 08:19:05,860 | INFO | POST / | Duration: 148.06 ms
5c7fbb4485cd8w7 2022-10-10T09:21:39.251Z 2022-10-10 09:21:39,250 | ERROR | 不支持内容类型 "None"。支持的内容类型有:application/json、text/csv、text/plain、image/png、image/jpeg、image/jpg、image/tiff、image/bmp、image/gif、image/webp、image/x-image、audio/x-flac、audio/flac、audio/mpeg、audio/wave、audio/wav、audio/x-wav、audio/ogg、audio/x-audio、audio/webm、audio/webm;codecs=opus
5c7fbb4485cd8w7 2022-10-10T09:21:44.114Z 2022-10-10 09:21:44,114 | ERROR | 不支持内容类型 "None"。支持的内容类型有:application/json、text/csv、text/plain、image/png、image/jpeg、image/jpg、image/tiff、image/bmp、image/gif、image/webp、image/x-image、audio/x-flac、audio/flac、audio/mpeg、audio/wave、audio/wav、audio/x-wav、audio/ogg、audio/x-audio、audio/webm、audio/webm;codecs=opus
现在,让我们提高安全级别并部署私有终端节点。
部署私有推理终端节点
重复上述步骤,这次选择 私有
。
这将打开一个新的框,询问我要在其中可见终端节点的AWS账户的标识符。我输入适当的ID,然后点击 创建终端节点
。
不确定您的AWS账户ID吗?这是一个AWS CLI的一行命令: aws sts get-caller-identity --query Account --output text
几分钟后,推理终端点用户界面将显示VPC服务名称。我的是 com.amazonaws.vpce.eu-west-1.vpce-svc-07a49a19a427abad7
。
接下来,我打开AWS控制台并转到VPC终端节点页面。然后,我点击 创建终端节点
来创建一个VPC终端节点,这将使我的AWS账户能够通过AWS PrivateLink访问我的推理终端节点。
简而言之,我需要填写上面显示的VPC服务名称、选择允许访问终端节点的VPC和子网,并附加一个适当的安全组。没有可怕的事情:我只需要按照推理终端节点文档中列出的步骤进行操作。
一旦我创建了VPC终端节点,我的设置就如下所示。
回到推理端点用户界面,私有端点在一两分钟后运行。让我们来进行测试!
在允许访问VPC端点的子网中启动Amazon EC2实例,我使用推理端点URL来预测我的测试图像。
curl https://oncm9ojdmjwesag2.eu-west-1.aws.endpoints.huggingface.cloud \
-X POST --data-binary '@food.jpg' \
-H "Authorization: Bearer MY_API_TOKEN" \
-H "Content-Type: image/jpeg"
[{"score":0.9998466968536377, "label":"鹰嘴豆泥"},
{"score":0.00006414744711946696, "label":"油炸豆丸"},
{"score":6.4065129663504194e-6, "label":"蜗牛"},
{"score":5.819705165777123e-6, "label":"魔鬼蛋"},
{"score":5.532585873879725e-6, "label":"虾和燕麦"}]
<p就是这样了。测试完成后,我删除了已创建的端点,以避免产生不必要的费用。我还在AWS控制台中删除了VPC端点。
Hugging Face的客户已经在使用推理端点。例如,Phamily,内部慢性病管理和积极护理平台的第一名,告诉我们推理端点有助于简化和加速符合HIPAA的Transformer部署。
现在轮到你了!
<p有了推理端点,您可以在几分钟内以几次点击的方式部署生产级、可扩展、安全的端点。为什么不试试呢?
<p我们有很多想法来改进服务,我们很乐意在Hugging Face论坛中听到您的反馈。
<p感谢您的阅读,祝您在推理端点上玩得愉快!