主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用 Docker 将晶圆图缺陷分类器部署为微服务

此示例演示了如何从Classify Defects on Wafer Maps Using Deep Learning (Image Processing Toolbox)中描述的晶圆图缺陷分类器创建一个微服务 Docker® 镜像。通过 MATLAB® Compiler SDK™ 创建的微服务镜像提供一个可用于访问 MATLAB 代码的 HTTP/HTTPS 端点。

您可以先将 MATLAB 函数打包成可部署存档,然后创建包含该存档和最小 MATLAB Runtime 包的 Docker 镜像。之后,您可以在 Docker 中运行该镜像,并使用任何 MATLAB Production Server™ 客户端 API 调用服务。

示例文件列表

  • waferdefect.m

要下载示例文件,请在 MATLAB 命令行窗口中键入以下内容。

openExample("compilersdk/WaferDefectExample", workDir=pwd)

必需的产品

在 MATLAB 命令提示符下键入 ver 以验证是否安装了以下产品:

  • MATLAB

  • Deep Learning Toolbox™

  • MATLAB Compiler™

  • MATLAB Compiler SDK

前提条件

创建推理函数

首先,在一个名为 waferdefect.m 的单独文件中创建一个执行推理的函数。

function prediction = waferdefect(image)
    load("CNN-WM811K.mat","preTrainedNetwork");
    
    %classify the wafer images in the batch and return the results
    prediction = string(classify(preTrainedNetwork,imresize(imread(image), [48,48])));
    disp(string(prediction))
end

使用下面的附带图像,从 MATLAB 命令行测试该函数。

waferimage.png

[im, cmap] = imread("waferimage.jpg");
imshow(im, cmap)
%% Detect objects in image
prediction = waferdefect(im)

prediction = "Edge-Loc"

注意:对于此示例,用于测试分类器的 waferimage.jpg 文件将包含在 AdditionalFiles 参量下。实际上,这些图像可能会被摄像机定期捕捉到。

创建可部署存档

接下来,使用 waferdefect 函数将 compiler.build.productionServerArchive 函数打包成可部署的存档。

您可以使用名称-值参量在 compiler.build 命令中指定其他选项。有关详细信息,请参阅compiler.build.productionServerArchive

deployableArchive = compiler.build.productionServerArchive('waferdefect.m',...
ArchiveName='waferdefectclassifier', AdditionalFiles=["CNN-WM811K.mat", "waferimage.jpg"], Verbose=true);

编译完成后,该函数会在您的当前目录中创建一个名为 waferdefectproductionServerArchive 的文件夹来存储可部署存档。

将存档打包成微服务 Docker 镜像

使用您创建的 deployableArchive 对象构建微服务 Docker 镜像。

您可以使用名称-值参量在 compiler.build 命令中指定其他选项。有关详细信息,请参阅compiler.package.microserviceDockerImage

compiler.package.microserviceDockerImage(deployableArchive,'ImageName','waferdefectclassifier');

此函数会在本地容器仓库中创建一个名为 waferdefectclassifier 的 Docker 容器镜像。您可以通过打开命令提示符窗口并输入以下命令来验证 Docker 容器镜像是否已创建:

docker images
REPOSITORY                                                               TAG               IMAGE ID       CREATED              SIZE
waferdefectclassifier                                                    latest            809ec52ec3f9   About a minute ago   6.96GB
matlabruntime/r2023a/release/update3/f08140002000000010                  latest            e46173b11d3c   2 days ago    

此外,该函数会在当前目录中生成一个 MicroserviceDockerContext 文件夹,其中包含以下文件:

  • applicationFilesForMATLABCompiler/waferdefect.ctf - 可部署存档文件。

  • Dockerfile - 指定 Docker 运行时选项的 Docker 文件。

  • GettingStarted.txt - 包含部署信息的文本文件。

GettingStarted.txt 文件包含用于在本地启动微服务进行测试的命令

docker run --rm -p 9900:9910 waferdefectclassifier -l trace &

端口 9910 是 Docker 容器内微服务公开的默认端口。您可以将微服务映射到主机上的任何可用端口。对于此示例,微服务映射到端口 9900。

您可以在 Docker 命令中指定其他选项。有关完整选项列表,请参阅微服务命令参量

一旦微服务容器在 Docker 中运行,您就可以通过在 Web 浏览器中访问以下 URL 来检查服务的状态:

http://localhost:9900/api/health

如果服务已准备就绪,可以接收请求,您将看到以下消息:

"status: ok"

测试正在运行的服务。在终端中,使用 curl 命令通过端口 9900 向服务发送 JSON 查询。有关构造 JSON 请求的详细信息,请参阅MATLAB 数据类型的 JSON 表示 (MATLAB Production Server)

Linux 和 macOS 终端

curl -v -H Content-Type:application/json \
-d '{"nargout":1,"rhs":["https://<path_to_the_image_file>"]}' \ 
"http://localhost:9900/waferdefectclassifier/waferdefect" | jq -c

Windows PowerShell

Invoke-RestMethod -Uri 'http://localhost:9900/waferdefectclassifier/waferdefect' -Method Post -ContentType 'application/json' -Body '{"nargout":1,"rhs":["https://uk.mathworks.com/help/examples/images_deeplearning/win64/ClassifyWaferMapDefectsUsingDeepLearningExample_08.png"]}' | ConvertTo-Json

输出为:

{"lhs":[{"mwdata": "Edge-Loc", "mwsize": "1 1", "mwtype": "string"}]}

共享 Docker 镜像

您的 Docker 镜像可以通过多种方式共享。

  • 将您的镜像推送到 Docker 的中央注册表 DockerHub,或者推送到您的私有注册表。这是最常见的工作流。

  • 将您的镜像保存为 tar 存档,然后与他人共享。该工作流适合于立即测试。

有关将您的镜像推送到 DockerHub 或您的私有注册表的详细信息,请查阅 Docker 文档。

Docker 镜像保存为 Tar 存档

要将您的 Docker 镜像保存为 tar 存档,请打开系统命令行窗口,导航到 Docker 上下文文件夹,然后键入以下命令。

docker save waferdefectclassifier -o waferdefectclassifier.tar

此命令会在当前文件夹中创建一个名为 waferdefectclassifier.tar 的文件。在与其他用户共享 tarball 之前,请设置适当的权限(例如,使用 chmod 进行设置)。

从 Tar 存档加载 Docker 镜像

在最终用户计算机上加载 tarball 中包含的镜像。

docker load --input waferdefectclassifier.tar

验证镜像是否已加载。

docker images

运行 Docker 镜像

docker run --rm -p 9900:9910 waferdefectclassifier

另请参阅

| | |

主题

外部网站