你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于 Azure NP 系列 VM 的 FPGA 证明(预览版)
适用于:✔️ Linux VM ✔️ Windows VM ✔️ 灵活规模集 ✔️ 统一规模集
FPGA 证明服务对 Xilinx 工具集生成的设计检查点文件(称为“网表”)执行一系列验证,并生成一个包含已验证映像的文件(称为“位流”),该文件可加载到 NP 系列 VM 中的 Xilinx U250 FPGA 卡上。
注意
- 此 VM 系列和 FPGA 证明目前以预览版提供。
- 有关 Beta 版本、预览版或尚未正式发布的 Azure 功能所适用的法律条款,请参阅预览版使用条款 | Microsoft Azure。
- 注册公共预览版。
新闻
当前证明服务使用的是 Xilinx 的 Vitis 2021.1,我们将在 2022 年 9 月 26 日移至 2022.1。 此更改对大多数用户应该是透明的。 使用 Vitis 2022.1“证明”设计后,应移至 XRT2022.1。 Xilinx 根据 XRT 2022.1 发布了新的市场映像。 请注意,当前设计已在 Vitis 2020.2 或 2021.1 上证明,适用于当前部署市场映像以及基于 XRT2022.1 的新映像
在转向 2021.1 的过程中,Xilinx 引入了新的 DRC,它可能会影响以前在 Vitis 2020.2 上有效某些设计(有关 BUFCE_LEAF 失败证明)。有关更多详细信息,请参阅此处:Xilinx AR 75980 UltraScale/UltraScale+ BRAM: CLOCK_DOMAIN = Common Mode 倾斜检查。
先决条件
你需要 Azure 订阅和 Azure 存储帐户。 该订阅可让你访问 Azure,该存储帐户用于保存证明服务的网表文件和输出文件。
我们提供了 PowerShell 和 Bash 脚本用于提交证明请求。 脚本使用可在 Windows 和 Linux 上运行的 Azure CLI。 PowerShell 可在 Windows、Linux 和 macOS 上运行。
适用于 Windows、Linux 和 macOS 的 PowerShell 下载(仅适用于 PowerShell 脚本)
你需要为你的租户和订阅 ID 授权,以便向证明服务进行提交。 请访问 https://aka.ms/AzureFPGAAttestationPreview 来请求访问权限。
生成证明设计
用于生成设计的首选 Xilinx 工具集是 Vitis 2022.1。 可以使用通过该工具集的早期版本创建的,但仍与 2022.1 兼容的网表文件。 请确保你加载了要用于生成的正确 shell。 当前支持的版本为 xilinx_u250_gen3x16_xdma_2_1_202010_1
。 可以从 Xilinx Alveo Lounge 下载支持文件。
必须将以下参数包含在 Vitis(v++ 命令行)中,以生成包含网表(而不是位流)的 xclbin
文件。
--advanced.param compiler.acceleratorBinaryContent=dcp
登录到 Azure
在 Azure 中执行任何操作之前,你必须先登录到 Azure,设置有权调用该服务的订阅。 为此,请使用 az login
和 az account set –s <Sub ID or Name>
命令。 若要进一步了解此过程,可查看此处文章:使用 Azure CLI 登录。 在命令行中使用“以交互方式登录”或“使用凭据登录”选项 。
创建存储帐户和 Blob 容器
必须将网表文件上传到 Azure 存储 Blob 容器供证明服务访问。
有关创建帐户、容器以及将网表作为 Blob 上传到该容器的详细信息,请参阅快速入门:使用 Azure CLI 创建、下载和列出 Blob。
也可以使用 Azure 门户执行此操作。
将网表文件上传到 Azure Blob 存储
可通过多种方式复制文件;下面演示了使用 az storage upload cmdlet 的示例。 az 命令在 Linux 和 Windows 上均可运行。 可以选择任何名称作为“Blob”名称,但请确保保留 xclbin
扩展名。
az storage blob upload --account-name <storage account to receive netlist> --container-name <blob container name> --name <blob filename> --file <local file with netlist>
运行证明脚本
若要运行脚本,需要提供你的存储帐户名称、存储了网表文件的 Blob 容器的名称,以及网表文件的名称。 此外,你还需要创建一个服务共享访问签名 (SAS),用于授予对容器(而非网表)的读/写访问权限。 证明服务使用此 SAS 创建网表文件的本地副本,并将验证过程生成的输出文件写回到容器。
此处提供了共享访问签名的概述,以及有关服务 SAS 的具体信息。 服务 SAS 页面包含有关保护生成的 SAS 的重要注意事项。 请阅读这些注意事项,了解为何有必要防范 SAS 遭到恶意使用或意外使用。
可以使用 az storage container generate-sas cmdlet 生成容器的 SAS。 以 UTC 格式指定过期时间,该时间比提交时间至少晚几个小时;6 小时左右应该就绰绰有余了。
如果你要使用虚拟目录,必须将目录层次结构包含为容器参数的一部分。 例如,如果你有一个名为“netlists”的容器,并有一个包含网表 Blob 的名为“image1”的虚拟目录,请指定“netlists/image1”作为容器名称。 添加任何额外的目录名称以指定更详细的层次结构。
PowerShell
$sas=$(az storage container generate-sas --account-name <storage acct name> --name <blob container name> --https-only --permissions rwc --expiry <e.g., 2021-01-07T17:00Z> --output tsv)
.\Validate-FPGAImage.ps1 -StorageAccountName <storage acct name> -Container <blob container name> -BlobContainerSAS $sas -NetlistName <netlist blob filename>
Bash
sas=az storage container generate-sas --account-name <storage acct name> --name <blob container name> --https-only --permissions rwc --expiry <2021-01-07T17:00Z> --output tsv
validate-fpgaimage.sh --storage-account <storage acct name> --container <blob container name> --netlist-name <netlist blob filename> --blob-container-sas $sas
检查提交状态
证明服务将返回提交项的业务流程 ID。 提交脚本会自动开始通过轮询完成状态来监视提交项。 业务流程 ID 是我们评审提交项所发生的情况的主要方式,因此在遇到问题时请保留该 ID。 作为参考点,证明服务大约需要花费 30 分钟才能处理完一个较小的网表文件(300MB 大小);处理完一个 1.6GB 文件则需要一小时。
可以随时调用 Monitor-Validation.ps1 脚本并提供业务流程 ID 作为参数,来获取证明的状态和结果:
.\Monitor-Validation.ps1 -OrchestrationId <orchestration ID>
或者,可将 HTTP POST 请求提交到证明服务终结点:
https://fpga-attestation.azurewebsites.net/api/ComputeFPGA_HttpGetStatus
请求正文应包含你的订阅 ID、租户 ID,以及证明请求的业务流程 ID:
{
"OrchestrationId": "<orchestration ID>",
"ClientSubscriptionId": "<your subscription ID>",
"ClientTenantId": "<your tenant ID>"
}
验证后的步骤
服务会将其输出写回到容器。 如果成功通过了验证,则容器将具有原始网表文件 (abc.xclbin)、包含位流的文件 (abc.xclbin)、用于标识所存储位流的专用位置的文件 (abc.azure.xclbin) 和四个日志文件:启动进程有一个日志文件 (abc-log.txt),执行验证的三个并行阶段各有一个日志文件。 这些文件命名为 *logPhaseX.txt,其中 X 是阶段的编号。 将在 VM 上使用 azure.xclbin,以发出将已验证的映像上传到 U250 的信号。
如果通不过验证,则会写入一个 error-*.txt 文件,指出哪个步骤失败。 另外,还可在日志文件中检查是否有错误日志指出证明已失败。 联系我们请求支持时,请务必连同业务流程 ID 一起,将所有这些文件包含为支持请求的一部分。
可以使用 Azure 门户创建容器,以及上传网表和下载位流与日志文件。 目前不支持通过门户提交证明请求及监视其进度,必须如前所述通过脚本实现此目的。