你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
排查 Azure Quantum 中的常见问题
使用 Azure Quantum 服务时,可能会遇到这些常见问题。 了解如何解决这些问题。
连接到工作区
问题:无法通过 pytket-azure CI 向 Azure Quantum 进行身份验证
尝试使用环境变量“AZURE_TENANT_ID”、“AZURE_CLIENT_ID”和“AZURE_CLIENT_SECRET”通过 CI 环境中的包向 Azure Quantum pytket-azure
进行身份验证时,可能会遇到错误:
Code: InsufficientPermissions
Message: There are not enough permissions to perform this operation.
若要解决此问题,请尝试改用连接字符串和环境变量“AZURE_QUANTUM_CONNECTION_STRING”进行身份验证。 有关详细信息,请参阅使用连接字符串进行连接。
connection_string = "[Copy connection string]"
import os
os.environ["AZURE_QUANTUM_CONNECTION_STRING"] = connection_string
正在提交作业
问题:缺少 targets
target如果要从可用target列表中缺少运行作业的位置,可能需要更新到Quantum Development Kit最新版本的 Visual Studio Code。 有关详细信息,请参阅 更新 QDK。
问题:操作返回无效的状态代码“未授权”
解决此问题的步骤:
打开 Azure 门户 (https://portal.azure.com) 并对你的帐户进行身份验证。
在“导航”下,选择“订阅”并选择订阅。
选择“访问控制(IAM)”。
在“检查访问权限”下,搜索电子邮件地址并选择帐户。
不应看到 列出“所有者 ”或“ 参与者” 角色。
选择“角色分配”选项卡。
注意
如果看不到“角色分配”选项卡,可能需要将门户展开为全屏模式或关闭“<your name> 分配”窗格。
选择“角色”下拉列表,选择“所有者”或“参与者”,然后输入电子邮件地址并选择你的帐户。
选择“保存”。
现在应会看到配置了“所有者”或“参与者”角色的帐户集。
重新创建 Azure Quantum 工作区,然后针对这个新的工作区提交作业。
问题:“AuthorizationFailure - 此请求无权执行此操作”
如果作业提交失败并显示此消息,即使你已与 Azure Quantum 服务建立有效的连接,也可以将存储帐户配置为阻止公共网络访问。 Azure Quantum 服务仅支持通过公共 Internet 访问的存储帐户。
若要检查存储帐户,请执行以下操作:
- 在 Azure 门户的量子工作区页上,选择“概述”并选择存储帐户。
- 在存储帐户页上,在“安全性 + 网络”中,选择“网络”。
- 在公共网络访问的“防火墙和虚拟网络”选项卡中,确保选中“启用所有网络”。
问题:尝试通过 CLI 提交 Q# 程序时出现“无法编译程序”
尝试在命令提示符处使用 az quantum submit
命令提交作业时,可能会遇到以下错误消息:
az quantum job submit ...
Failed to compile program.
Command ran in 21.181 seconds (init: 0.457, invoke: 20.724)
当 Q# 程序出现问题导致编译失败时,会发生此错误。
问题:编译器错误“门参数数错误”
从本地 Jupyter Notebook 或命令行环境将作业提交到 Quantinuum 并使用旧的 QASM 翻译器(OPENQASM 2.0)时,可能会遇到此错误:
Job ID <jobId> failed or was cancelled with the message: 1000: Compile error: [<file, line>] Wrong number of gate parameters
当逗号 “,” 或其他非句点字符用作小数分隔符时,会发生此错误,这在多种语言中很常见。 将任何非句点小数分隔符替换为句点“.”。
// replace this line:
rx(1,5707963267948966) q[0];
// with this:
rx(1.5707963267948966) q[0];
注意
此问题不会发生在 Azure Quantum 门户中的托管笔记本中,仅在本地开发环境中发生。
问题:编译器错误“不适用于当前编译配置”
在 VS Code 的 Jupyter Notebook 中运行 Q# 代码单元时,可能会遇到错误:
<function name> not found. Found a matching item `<function name>' that is not available for the current compilation configuration
此错误表示 QIR target 配置文件设置为“基本”,且有问题的函数需要“无限制target”配置文件。 若要将配置文件设置为“不受限制”,请执行以下操作target:
- 在 VS Code 中的 Q# 程序中,选择 Q#:QIR 基于 底部状态栏。
- 从顶部状态栏中显示的选项中,选择 “Q#:不受限制”。
问题:操作返回了无效的状态代码“禁止”
提交第一个作业时,可能会收到“禁止”错误代码。
在创建工作区时出现此问题的原因可能如下:Azure Quantum 未能完成角色分配,无法将新工作区链接到指定的存储帐户。 典型的场景:如果在工作区创建完成之前关闭了选项卡或 Web 浏览器窗口,就会发生这种情况。
可以按照以下步骤验证是否遇到此角色分配问题:
- 在 Azure 门户中导航到新的 Quantum 工作区
- 在“概述>概要>”存储帐户下,选择“存储帐户”链接
- 在左侧导航栏中,选择“访问控制(标识和访问管理)”
- 选择“角色分配”
- 验证你的工作区是否显示为“参与者”
- 如果工作区未显示为 “参与者” ,则可以:
- 在关闭 Web 浏览器标签页或窗口之前,创建新的工作区,并确保等待工作区创建完成。
- 在存储帐户下添加适当的角色分配
- “访问控制 (IAM)”>“添加角色分配”
- “角色”>“参与者”
- “分配访问权限至”>“用户、组或服务主体”
- “选择”>“[工作区名称]”
- 保存
问题:作业失败并出现错误代码:QIRPreProcessingFailed
将作业提交到 Rigetti 提供程序时,作业会失败,并在Azure 门户的作业管理控制台中报告:
Error code: QIRPreProcessingFailed
Error message: No match found for output recording set converter from outputrecordingset.v2.labeled to outputrecordingset.v1.nonlabeled
此错误可能是由于与旧版 pyqir 或 qiskit-qir 的依赖项冲突导致的。 在本地计算机上卸载 pyqir、pyqir-*和 qiskit-qir 的所有版本,然后使用 [qiskit] 参数安装或更新 azure-quantum Python 包:
pip install --upgrade azure-quantum[qiskit]
问题:检索有关失败作业的基本信息
将作业提交到硬件 target后,作业可能会在失败前数小时(甚至一两天)坐在队列中。
若要检索有关失败的详细信息,请执行以下命令:
- 使用
get_results()
作业对象的方法查看输出或返回的错误消息:
job.get_results()
- 在 Azure 门户工作区中,选择 “操作 > 作业管理”,然后选择作业 名称 以打开详细信息窗格。
- 在 Azure 门户工作区中,选择 “操作 > 提供程序”。 验证计算机的可用性 target 。 提交到targets状态为“已降级”的作业可能会停留在队列中的时间比平时长。 有时,作业得到处理,但有时它们超时并返回不可用的错误target。
问题:在以编程方式连接到工作区时,我一直被要求进行身份验证
如果使用 Azure Quantum Python SDK(例如,在 Jupyter 笔记本中),并且使用 AzureQuantumProvider 类连接到工作区,则每次运行脚本时,都可能会遇到一个弹出窗口以向 Azure 进行身份验证。
发生这种情况是因为每次运行脚本时都会重置安全令牌。
可以使用 Azure CLI 运行 az login
来解决此问题。 有关详细信息,请参阅 az login。
问题:更新 azure-quantum 包后,监视作业时出现错误“ModuleNotFoundError: No module named qiskit.tools”
从 Qiskit 1.0 开始, qiskit.tools
函数所需的 job_monitor()
模块已弃用。 若要监视作业,请使用 wait_for_final_state()
或 result
函数。
job = MyTarget.run(circuit, shots=100)
# to wait until the job is complete
job.wait_for_final_state()
# to return the results of the job
result = job.result()
Azure Quantum 资源估算器
以下常见方案可能会阻止资源估算作业完成。 了解如何解决它们。
问题:量子算法必须至少包含一个 T 状态或度量
为了考虑将任意量子程序映射到逻辑量子比特的 2D 数组,资源估算器假定 并行合成顺序 Pauli 计算(PSSPC) (请参阅 arXiv:2211.07629,附录 D)对输入程序执行。 在这种方法中,所有 Clifford 操作都通过所有 T 门、旋转门和测量操作通勤,因此可以有效地评估单个 Clifford 操作。 因此,包含 T 状态的量子程序(例如 T 门或旋转门)和测量操作不需要任何物理量子计算资源。
Error message: Algorithm requires at least one T state or measurement to estimate resources
问题:物理 T 门错误率过高
逻辑 T 状态错误率取决于错误预算和量子程序中的 T 状态数。 T 工厂 用于从物理 T 门创建具有所需逻辑 T 状态误差率的 T 状态,该状态具有 物理 T 门误差率。 通常,物理 T 门错误率远高于所需的逻辑 T 门错误率。 在某些情况下,物理 T 门错误率比所需的逻辑 T 状态误差率要高得多,这样就找不到能够产生足够质量的逻辑 T 状态的 T 工厂。
Error message: No T factory can be found, because the required logical T state error rate is too low
下面是在此类方案中可以执行的操作:
- 增加错误预算(总计或 T 状态的部分)。
- 减少量子比特参数中的物理 T 门错误率。
- 通过减少 T 门、旋转门和 Toffoli 门来减少量子程序中的 T 状态数。
问题:物理 T 门错误率过低
也有相反的情况,其中物理 T 门错误率低于所需的逻辑 T 状态错误率。 在这种情况下,不需要 T 工厂,因为物理 T 门错误率已足够质量。 但是,这需要仔细考虑传输单元的影响,这些传输单元将物理 T 状态从代码距离 1 传输到算法的代码距离(请参阅 arXiv:2211.07629,附录 C)。 一般来说,在T工厂的存在下,转移单位的成本是微不足道的。
Error message: No T factory can be found, because the required logical T state error rate is too high; transfer units are necessary to perform a resource estimation accurately. One possibility to circumvent this problem is to increase the physical T gate error rate of the qubit parameters.
下面是在此类方案中可以执行的操作:
- 将量子比特参数中的物理 T 门错误率提高到所需的逻辑 T 状态错误率。
- 减少错误预算或仅减少 T 状态的部分。
问题:错误率必须是介于 0 和 1 之间的数字
错误率应始终为介于 0 和 1 之间的值。 此外,若要使错误更正有效,入口和度量的物理误差率必须低于一个值,该值取决于错误更正代码的属性和所需的逻辑错误率。
下面是在此类方案中可以执行的操作:
- 增加错误预算(总计或逻辑错误的部分)。
- 减少量子比特参数中的物理错误率。
问题:约束最大运行时和物理量子比特的最大数目互斥
资源估算器目前只接受其中一个或maxPhysicalQubits
约束,但不接受两个maxDuration
约束。 如果为单个作业提供这两个条件 maxDuration
和 maxPhysicalQubits
约束,则返回 BothDurationAndPhysicalQubitsProvided
错误。
问题:运行 QIR 估计计数容器:未定义的符号__quantum__rt__result_record_output
此错误是由于通过 qiskit_qir Python 包为 Qiskit 线路生成 QIR 而不将参数设置为 record_output
False
。
若要避免此错误,请执行以下操作之一:
- 使用 azure_quantum Python 包将 Qiskit 线路提交到 Azure Quantum(建议)。
- 使用 qiskit_qir Python 包时,请务必在提交线路之前将参数设置为
record_output
该参数False
。
创建 Azure Quantum 工作区
使用Azure 门户创建工作区时,可能会出现以下问题。
问题:无法在 Azure 门户 中访问工作区创建表单;系统会要求你改为注册订阅
出现此问题是因为没有活动的订阅。
例如,你可能已注册 30 天免费试用 Azure 订阅,其中包括在 Azure 服务上使用的 200 美元免费 Azure 额度。 请注意,这些 Azure 额度与 Azure Quantum 额度不同,并且不符合在量子硬件提供程序上使用的条件。 注册 30 天后或使用 200 美元的免费 Azure 额度(以先发生为准),必须升级到即用即付订阅才能继续使用 Azure Quantum 服务。 拥有活动订阅后,Azure 门户将允许访问工作区创建表单。
若要查看订阅和关联角色的列表,请参阅 “检查订阅”。
问题: 快速创建 选项不可用
必须是 所选订阅的所有者 才能使用 “快速创建 ”选项。 若要查看订阅和关联角色的列表,请参阅 “检查订阅”。 如果你是订阅 参与者,则可以使用 “高级创建 ”选项创建工作区。
问题:无法创建或选择资源组或存储帐户
出现此问题是因为订阅、资源组或存储帐户级别没有所需的授权。 有关所需访问级别的详细信息,请参阅 创建工作区的角色要求。
问题:选择 “创建”后显示“部署验证失败”错误消息
此错误消息可能包含更多详细信息,例如“客户端没有执行操作的授权”。
出现此问题是因为订阅、资源组或存储帐户级别没有所需的授权。 有关所需访问级别的详细信息,请参阅 创建工作区的角色要求。
如果最近授予了访问权限,则可能需要刷新页面。 有时,新角色分配可能需要长达一小时才能对堆栈中的缓存权限生效。
问题:在“提供程序”选项卡上看不到特定的量子硬件提供程序
出现此问题的原因是提供商不支持订阅设置的计费区域。 例如,如果你的订阅在以色列设置,“提供商”选项卡不会将 Rigetti 列为可用提供商。 有关提供商列表及其按国家/地区的可用性,请参阅 Azure Quantum 提供程序的全球可用性。
问题:工作区创建或添加/删除提供程序失败,出现“ResourceDeploymentFailure”或“ProviderDeploymentFailure”
此问题可能包括更多详细信息,例如“ResourceDeploymentFailure - 使用终端预配状态”Failed“完成的”AzureAsyncOperationWaiting“资源操作,或”ProviderDeploymentFailure - 未能为提供程序创建计划: <提供程序>名称”。
之所以发生这种情况,是因为租户未Azure 市场购买。 按照“启用Azure 市场购买”中的步骤启用Azure 市场购买。
问题:部署量子工作区或部署存储帐户失败,并出现以下错误之一:
- 工作区:“资源写入操作无法成功完成,因为它达到了终端预配状态”Failed”。
- 存储帐户:“模板部署因策略冲突而失败”。
如果订阅安全策略阻止创建启用了公共访问权限的存储帐户,则可能会出现此问题。 Azure Quantum 服务仅支持通过公共 Internet 访问的存储帐户。
若要解决此问题,请与订阅管理员合作,获取要使用的存储帐户的异常。
Azure Quantum 门户
问题:保存的笔记本未加载
在 工作区中选择笔记本 后,保存的笔记本列表会显示进度栏,但永远不会加载。
这可能发生在三个原因:
如果存储帐户不再存在。 如果删除了链接到工作区的存储帐户,则可能会发生这种情况。 若要验证,请选择 工作区的“概述 ”页,然后选择存储帐户的链接。 如果存储帐户已删除,将看到 404 - 找不到 错误。
如果未为公共 Internet 访问启用存储帐户。 有关详细信息,请参阅 授权失败 。
如果工作区的托管标识不是 存储帐户的参与者 。 检查工作区标识(使用与工作区同名)是否仍具有 存储帐户的参与者 角色分配。 若要验证,请选择 工作区的“概述 ”页,然后选择存储帐户的链接。 在存储帐户的“概述”页上,选择“访问控制”(IAM),并验证工作区是否在“参与者”下列出。