随着人工智能技术的不断发展,越来越多的应用场景需要将训练好的模型部署到实际的设备上进行推理计算。例如,无人驾驶汽车和生产线上的缺陷识别等。然而,对于所有人,包括该领域的熟练实践者来说,部署模型所需的前提条件和基础设施配置仍然是一项令人生畏的任务。
一个显著的挑战是如何在模型上运行推理。当有一个训练好的模型准备使用时,将如何将其部署到满足用例的设备上?如果决定在后期更换推理设备,这将是一个耗时的过程,尤其是如果需要手动完成的话。
今天,宣布推出新的Roboflow推理服务器,这是一个基于Docker的应用程序,可以无缝集成到Roboflow中,帮助部署自定义的计算机视觉模型。推理服务器为模型部署到边缘提供了一个健壮、经过现场测试的解决方案。
使用推理服务器时,将能够:无需修改任何代码,即可更改部署目标,从离线到在线,或从托管API到边缘,或从Jetson到Raspberry Pi;在本地、离线或边缘部署目标检测、实例分割和分类模型;立即使用最新的模型,如CLIP,跨部署目标。
在这篇博客文章中,将介绍Roboflow推理服务器的功能,并提供一些如何使用服务器的简单示例。
什么是Roboflow推理服务器?
Roboflow推理服务器是一个可以通过Docker部署的应用程序,通过它可以运行模型并检索预测。推理服务器在本地运行,但也由Roboflow托管。可以查询API或本地部署的模型以获得预测。
如果选择在本地部署模型,将需要连接到互联网以检索模型。当训练新模型以便它们可以被检索时。在推理过程中,不需要互联网连接。这非常适合需要在难以维持稳定网络连接的环境中运行模型的情况。
让讨论一下服务器中可用的一些功能。
Roboflow使训练自定义计算机视觉模型变得容易,这些模型可以用于各种任务,包括目标检测、实例分割和分类。所有这些任务都由Roboflow推理服务器支持。
除了自定义训练的计算机视觉模型外,Roboflow还使运行一些常见的公共模型变得容易,称这些模型为核心模型。第一个可用于Roboflow推理服务器的核心模型是OpenAI的CLIP。
CLIP可以通过计算嵌入来帮助理解图像,这本质上是将图像中的信息压缩成更易于管理的数据片段。这些嵌入使得快速比较图像成为可能。此外,CLIP可以处理语言并计算该语言的嵌入。这使得将人类语言句子与图像进行比较成为可能,这可以用于图像搜索。
推理服务器的使用
使用推理服务器有两种方式。可以使用托管端点或本地部署。要查询托管端点,请使用以下代码:
curl -XPOST "https://detect.roboflow.com/MODEL_NAME/VERSION?api_key=API_KEYℑ=IMAGE_URL"
要找到Roboflow模型名称和版本,可以查看关于这个话题的指南。可以通过遵循Roboflow文档中的API密钥指南来找到API密钥。
要使用本地端点,首先安装并运行与服务器相关的Docker容器:
docker run -it –rm –network=host roboflow/roboflow-inference-server-cpu
现在,可以使用以下语法查询服务器:
curl -XPOST "http://localhost:9001/MODEL_NAME/VERSION?api_key=API_KEYℑ=IMAGE_URL"
部署环境
现在已经讨论了服务器能做什么,让谈谈可以在哪种环境中使用Roboflow推理服务器。
利用Roboflow推理服务器的所有功能最简单方法是使用托管模型端点。这意味着可以向自己的自定义Roboflow API端点发送请求以获得想要的结果。负责基础设施,这样就可以少担心机器学习操作,更多地关注从推理中获得的结果。
对于某些应用,可能希望在自己的机器上托管模型。Roboflow推理服务器可以运行在几乎任何能够运行Docker容器的计算机上。Docker镜像针对目标环境发布。
最灵活的镜像是`cpu`和`arm-cpu`镜像。顾名思义,它们将使用CPU来运行模型。为了提高性能,可以在配备GPU的机器上启动推理服务器,并使用`trt`镜像。
在GPU上运行模型将提高与CPU相比的模型性能。如果使用的GPU支持TRT(TensorRT),推理服务器将使用优化的运行时,这将最大化模型性能。
最后,可能希望在边缘设备上运行模型。边缘设备是能够在远程环境中运行的小型计算机。为此,Roboflow推理服务器可以部署到NVIDIA Jetson设备上。在Jetsons上,推理服务器使用优化的运行时,以从相对较小的机器中挤出大量性能。
Roboflow推理API
Roboflow推理服务器实现了一个通用API。这意味着可以在不同目标环境之间无缝切换,而不需要更改客户端代码。此外,可以在本地部署和Roboflow托管端点之间切换,而不需要更改任何内容。
要使用Roboflow推理服务器进行模型推理,首先需要设置一个推理端点。这可以通过以下两种方式之一完成:
使用为每个托管在Roboflow上的模型自动创建的端点。这些端点始终可用且高度可扩展;或者在喜欢的环境中启动一个Roboflow推理服务器Docker容器。
如何启动Roboflow推理服务器
对于这些示例,将使用一个带有8核CPU和附加NVIDIA V100 GPU的Google Cloud VM。运行Roboflow推理服务器的最低先决条件是目标设备上安装了Docker。
首先,使用以下命令启动一个CPU推理服务器:
$ docker run -it –rm –network=host roboflow/roboflow-inference-server-cpu
可以看到机器从Docker Hub拉取了镜像并启动了它。默认情况下,镜像在`localhost`端口`9001`上监听。如果需要其他端口或主机,可以通过环境变量在运行时提供自定义配置。在这个例子中,设置推理服务器监听端口`8080`,即默认的HTTP端口。
$ docker run -it –rm –network=host -e PORT=8080 roboflow/roboflow-inference-server-cpu
如果想使用机器上附加的GPU,需要使用trt镜像,并在docker run命令上使用`--gpus`标志给Docker容器访问GPU的权限。
docker run -it –rm –network=host –gpus=all roboflow/roboflow-inference-server-trt
向推理服务器发送请求
现在已经启动了推理服务器,可以发送请求了。这些请求向推理服务器提供输入图像,响应是模型的输出,结构化为JSON数据。
在发送请求时,有许多选项可以改变推理服务器处理数据的方式。任何运行中的推理服务器的完整文档都可以在`/docs`路由上找到。此外,Roboflow文档托管了API规范的副本。
提示:可用的路由可能因目标环境而异。在任何环境中使用`/docs`路由可以看到任何运行中的推理服务器可用的路由。
正在不断改进Roboflow推理服务器和Roboflow推理API。目标是开源代码库,并与计算机视觉社区分享所拥有的。这将使得在没有Docker的情况下运行推理服务器变得容易,并使能够使用Roboflow推理服务器部署自己的自定义模型。