Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
本文介绍如何使用 Docker 打包已注册的 Azure 机器学习模型。
本文假设你已在机器学习工作区中训练并注册了一个模型。 若要了解如何训练和注册 scikit-learn 模型,请遵循本教程。
在某些情况下,你可能希望在不部署模型的情况下创建 Docker 映像。 或者,你可能希望下载映像并在本地 Docker 安装上运行它。 甚至可能需要下载用于生成映像的文件、对其进行检查和修改并手动生成映像。
这些工作都可以通过打包模型来完成。 此方法能对将模型作为 Web 服务托管所需的全部资产进行打包,让你能下载完整生成的 Docker 映像或生成该映像所需的文件。 可以通过两种方式使用模型打包:
下载已打包的模型: 下载包含模型以及将其作为 Web 服务托管所需的其他文件的 Docker 映像。
生成 Dockerfile: 下载生成 Docker 映像所需的 Dockerfile、模型、入口脚本和其他资产。 然后可以先检查这些文件或进行修改,再在本地生成映像。
这两个包都可用于获取本地 Docker 映像。
Tip
创建包类似于部署模型。 使用注册的模型和推理配置。
Important
若要下载完整生成的映像或要在本地生成映像,需要在开发环境中安装 Docker。
下面的示例生成一个映像,该映像已在工作区的 Azure 容器注册表中注册:
package = Model.package(ws, [model], inference_config)
package.wait_for_creation(show_output=True)
创建包后,可以使用 package.pull()
将映像拉取到本地 Docker 环境。 此命令的输出将显示映像的名称。 例如:
Status: Downloaded newer image for myworkspacef78fd10.azurecr.cn/package:20190822181338
.
下载模型后,使用 docker images
命令列出本地映像:
REPOSITORY TAG IMAGE ID CREATED SIZE
myworkspacef78fd10.azurecr.cn/package 20190822181338 7ff48015d5bd 4 minutes ago 1.43 GB
若要启动基于此映像的本地容器,请使用以下命令从 Shell 或命令行启动已命名容器。 使用 docker images
命令返回的映像 ID 替换 <imageid>
值。
docker run -p 6789:5001 --name mycontainer <imageid>
此命令启动名为 myimage
的映像的最新版本。 它将本地端口 6789 映射到 Web 服务正在侦听的容器中的端口 (5001)。 还将名称 mycontainer
分配给容器,使容器更易于停止。 启动容器后,可以将请求提交到 http://localhost:6789/score
。
下面的示例演示如何下载在本地生成映像所需的 Dockerfile、模型和其他资产。 generate_dockerfile=True
参数表示需要的是文件,而不是完整生成的映像。
package = Model.package(ws, [model], inference_config, generate_dockerfile=True)
package.wait_for_creation(show_output=True)
# Download the package.
package.save("./imagefiles")
# Get the Azure container registry that the model/Dockerfile uses.
acr=package.get_container_registry()
print("Address:", acr.address)
print("Username:", acr.username)
print("Password:", acr.password)
此代码将生成映像所需的文件下载到 imagefiles
目录。 已保存的文件中包含的 Dockerfile 引用存储在 Azure 容器注册表中的基础映像。 在本地 Docker 安装上生成映像时,需要使用地址、用户名和密码完成注册表身份验证。 采取以下步骤,通过本地 Docker 安装生成映像:
在 Shell 或命令行会话中使用以下命令,使用 Azure 容器注册表对 Docker 进行身份验证。 将
<address>
、<username>
和<password>
替换为package.get_container_registry()
检索到的值。docker login <address> -u <username> -p <password>
若要生成映像,请使用以下命令。 将
<imagefiles>
替换为package.save()
保存文件的目录的路径。docker build --tag myimage <imagefiles>
此命令将映像名设置为
myimage
。
若要验证是否已生成映像,请使用 docker images
命令。 在列表中应该能看到 myimage
映像:
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 2d5ee0bf3b3b 49 seconds ago 1.43 GB
myimage latest 739f22498d64 3 minutes ago 1.43 GB
若要启动基于此映像的新容器,请使用以下命令:
docker run -p 6789:5001 --name mycontainer myimage:latest
此命令启动名为 myimage
的映像的最新版本。 它将本地端口 6789 映射到 Web 服务正在侦听的容器中的端口 (5001)。 还将名称 mycontainer
分配给容器,使容器更易于停止。 启动容器后,可以将请求提交到 http://localhost:6789/score
。
以下代码是可与容器结合使用的 Python 客户端示例:
import requests
import json
# URL for the web service.
scoring_uri = 'http://localhost:6789/score'
# Two sets of data to score, so we get two results back.
data = {"data":
[
[ 1,2,3,4,5,6,7,8,9,10 ],
[ 10,9,8,7,6,5,4,3,2,1 ]
]
}
# Convert to JSON string.
input_data = json.dumps(data)
# Set the content type.
headers = {'Content-Type': 'application/json'}
# Make the request and display the response.
resp = requests.post(scoring_uri, input_data, headers=headers)
print(resp.text)
若要通过示例了解采用其他编程语言的客户端,请参阅使用部署为 Web 服务的模型。
若要停止容器,请在不同的 Shell 或命令行中使用以下命令:
docker kill mycontainer