Hugging Face 推理端点入门
训练机器学习模型已经变得相当简单,特别是随着预训练模型和迁移学习的兴起。好吧,有时它并没有那么简单,但至少,训练模型永远不会破坏关键应用程序,也不会让客户对你的服务质量感到不满。然而,部署模型……是的,我们都经历过。
在生产环境中部署模型通常需要经历一系列繁琐的步骤。将你的模型打包到容器中、配置基础设施、创建预测 API、保障其安全、进行扩展、监控等等。让我们面对现实吧:构建所有这些基础设施会占用宝贵的时间,而这些时间本可以用于真正的机器学习工作。不幸的是,这个过程也可能出错得一塌糊涂。
我们致力于通过新推出的 Hugging Face 推理端点来解决这个问题。本着在不牺牲最先进质量的前提下使机器学习变得更简单的精神,我们构建了一项服务,让您只需点击几下,就可以直接从 Hugging Face Hub 将机器学习模型部署到您喜欢的云平台上的托管基础设施中。简单、安全、可扩展:您可以拥有一切。
让我来告诉你这是如何工作的!
在推理端点上部署模型
查看推理端点支持的任务列表后,我决定部署一个 Swin 图像分类模型,这是我最近使用 AutoTrain 在 food101 数据集上微调的。如果你对我是如何构建这个模型感兴趣,这个视频将向你展示整个过程。
从我的模型页面开始,我点击“部署(Deploy)”,然后选择“推理端点(Inference Endpoints)”。

这会直接将我带到端点创建页面。

我决定将我的模型的最新版本部署在 AWS 的 `eu-west-1` 区域的单个 GPU 实例上。作为可选项,我还可以设置自动缩放,甚至可以将模型部署在自定义容器中。

接下来,我需要决定谁可以访问我的端点。从最不安全到最安全,有三个选项:
- 公开(Public):端点在公共的 Hugging Face 子网中运行,互联网上的任何人都可以无需任何身份验证地访问它。选择这个选项前请三思!
- 受保护(Protected):端点在公共的 Hugging Face 子网中运行,互联网上任何拥有相应组织令牌的人都可以访问它。
- 私有(Private):端点在私有的 Hugging Face 子网中运行。它在互联网上无法访问。它只能通过使用 AWS PrivateLink 创建的 VPC 端点在你的 AWS 账户中可用。你可以控制你的 AWS 账户中的哪个 VPC 和子网可以访问该端点。
让我们先部署一个受保护的端点,然后再部署一个私有的。
部署受保护的推理端点
我只需选择“受保护(Protected)”,然后点击“创建端点(Create Endpoint)”。

几分钟后,端点就启动并运行了,其 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'}]
转到“分析(Analytics)”选项卡,我可以看到端点指标。我的一些请求失败了,因为我故意省略了 `Content-Type` 标头。

要获取更多详细信息,我可以在“日志(Logs)”选项卡中查看完整的日志。
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 | Content type "None" not supported. Supported content types are: 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 | Content type "None" not supported. Supported content types are: 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
现在,让我们提高安全级别,部署一个私有端点。
部署私有推理端点
重复上述步骤,这次我选择“私有(Private)”。
这会打开一个新的框,要求我输入端点将可见的 AWS 账户的标识符。我输入相应的 ID,然后点击“创建端点(Create Endpoint)”。
不确定你的 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 端点页面。然后,我点击“创建端点(Create endpoint)”来创建一个 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":"hummus"},
{"score":0.00006414744711946696, "label":"falafel"},
{"score":6.4065129663504194e-6, "label":"escargots"},
{"score":5.819705165777123e-6, "label":"deviled_eggs"},
{"score":5.532585873879725e-6, "label":"shrimp_and_grits"}]
就是这么简单。测试完成后,我删除了我创建的端点以避免不必要的费用。我还在 AWS 控制台中删除了 VPC 端点。
Hugging Face 的客户已经在使用推理端点。例如,排名第一的内部慢性病护理管理和主动护理平台 Phamily 告诉我们,推理端点正在帮助他们简化和加速符合 HIPAA 标准的 Transformer 部署。
现在轮到你了!
感谢推理端点,你可以在几分钟内,仅需几次点击,就能部署生产级的、可扩展的、安全的端点。何不亲手一试呢?
我们有很多想法来让这项服务变得更好,并希望在 Hugging Face 论坛上听到你的反馈。
感谢您的阅读,祝您使用推理端点愉快!