Python 在 IONQ QPU 上调用 q# 文件导致错误 System.Text.Json,找不到版本=5.0.0.0 文件
Python calling q# file on IONQ QPU results in error about a System.Text.Json, Version=5.0.0.0 file not being found
正在尝试学习如何从 Python 代码调用 q# 并在 IONQ QPU运行 上实现它运行 =67=],因为它使用 VS 和 >dotnet 运行 的原始 ]q#代码。我遵循了指南和研讨会。
Python代码:
import qsharp
import qsharp.azure
qsharp.projects.add("****path to *******/TestIONQ.csproj")
from TestIONQ import GetRandomResult
print(f"Simulated Result: {GetRandomResult.simulate()}")
print("------------------------------------------------")
qsharp.azure.connect(
subscription = "****************************",
resourceGroup = "**************",
workspace = "************",
location = "******* US")
qsharp.azure.target("ionq.qpu")
result = qsharp.azure.execute(GetRandomResult, jobName="Generate random bit")
print(f" Final result from IONQ - QPU: {result}")
q#代码:
namespace TestIONQ {
open Microsoft.Quantum.Canon;
open Microsoft.Quantum.Intrinsic;
//@EntryPoint()
operation GetRandomResult() : Result {
use q = Qubit();
H(q);
return M(q);
}
}
和 .csproj 文件:
<Project Sdk="Microsoft.Quantum.Sdk/0.16.2104138035">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<ExecutionTarget>ionq.qpu</ExecutionTarget>
<IQSharpLoadAutomatically>true</IQSharpLoadAutomatically>
</PropertyGroup>
</Project>
在Anaconda qsharp-env环境(Python 3.7.10)中运行ning上述Python代码的结果如下如下:
Simulated Result: 0
------------------------------------------------
Connected to Azure Quantum workspace ####### in location #####us.
Loading package Microsoft.Quantum.Providers.IonQ and dependencies...
Active target is now ionq.qpu
Submitting TestIONQ.GetRandomResult to target ionq.qpu...
Failed to submit Q# operation TestIONQ.GetRandomResult for execution.
Could not load file or assembly 'System.Text.Json, Version=5.0.0.0, Culture=neutral, PublicKeyToken=####token#####'. The system cannot find the file specified.
显然,连接到 Azure 和 Workspace 没有问题。事实上,我可以 运行 Python 中的集装箱船优化示例没问题。当调用 .simulate() 时,这对于 Python 代码的前半部分也能正常工作。
接下来,当我尝试通过更改这一行来绕过 IONQ QPU 并使用它自己的模拟器时:
qsharp.azure.target("ionq.simulator")
结果错误相同,结果如下:
Simulated Result: 1
------------------------------------------------
Connected to Azure Quantum workspace ######## in location #######.
Loading package Microsoft.Quantum.Providers.IonQ and dependencies...
Active target is now ionq.simulator
Submitting TestIONQ.GetRandomResult to target ionq.simulator...
Failed to submit Q# operation TestIONQ.GetRandomResult for execution.
Could not load file or assembly 'System.Text.Json, Version=5.0.0.0, Culture=neutral, PublicKeyToken='....token......'. The system cannot find the file specified.
Traceback (most recent call last):
File "ionq_sim_remote.py", line 18, in <module>
result = qsharp.azure.execute(GetRandomResult, jobName="Generate random bit")
File "F:\Python38\miniconda\envs\qsharp-env\lib\site-packages\qsharp\azure.py", line 137, in execute
if "error_code" in result: raise AzureError(result)
qsharp.azure.AzureError: {'error_code': 1010, 'error_name': 'JobSubmissionFailed', 'error_description': 'Failed to submit the job to the Azure Quantum workspace.'}
在 Azure 上使用 Visual Studio 中的 q# 代码片段在 Azure 上很容易使用此 运行 在命令行中使用显示的变体工作坊
az quantum execute --target-id ionq.qpu --job-name IONQ_test --resource-group ***rg name*** --workspace-name ***ws name*** --location **** -o table
事实上,与模拟器相比,这在实际 QPU 硬件上似乎有 运行(给出精确的 0.5/0.5 结果)。
Result Frequency
-------- ----------
0 0.49800000
1 0.50200000
但是然后从 Python 调用相同的 q# 代码 - 包括相同的 .csproj 文件似乎抛出这个JSON 文件错误 - 即使将 qsharp-env 加载到 Anaconda 中。如果我做了一些愚蠢的事情,我深表歉意-试图在这里学习。
顺便说一句,这 很好 作为解决问题的方法,不需要 Anaconda 环境或任何特殊的东西:
Python:
import os
os.system(f'powershell.exe az quantum execute --target-id ionq.qpu --job-name Pytest --resource-group **** --workspace-name **** --location **** -o table ')
而且在实际硬件上的结果肯定是 运行(花了很长时间):
Result Frequency
-------- ----------- -------------------------
0 0.53200000 ▐███████████ |
1 0.46800000 ▐█████████ |
@Joab.Ai,感谢您发布此问题!我们已经确定这是特定于最新版本的 qsharp (0.16.2104.138035
)。
虽然我们正在研究修复,但解决方法是降级您的 qsharp
软件包版本:
编辑:我们已经在最新版本中解决了这个问题!使用此命令更新到最新版本:
conda install -c quantum-engineering qsharp=0.16.2105.140472
或简单地 运行:
conda update -c quantum-engineering qsharp
正在尝试学习如何从 Python 代码调用 q# 并在 IONQ QPU运行 上实现它运行 =67=],因为它使用 VS 和 >dotnet 运行 的原始 ]q#代码。我遵循了指南和研讨会。
Python代码:
import qsharp
import qsharp.azure
qsharp.projects.add("****path to *******/TestIONQ.csproj")
from TestIONQ import GetRandomResult
print(f"Simulated Result: {GetRandomResult.simulate()}")
print("------------------------------------------------")
qsharp.azure.connect(
subscription = "****************************",
resourceGroup = "**************",
workspace = "************",
location = "******* US")
qsharp.azure.target("ionq.qpu")
result = qsharp.azure.execute(GetRandomResult, jobName="Generate random bit")
print(f" Final result from IONQ - QPU: {result}")
q#代码:
namespace TestIONQ {
open Microsoft.Quantum.Canon;
open Microsoft.Quantum.Intrinsic;
//@EntryPoint()
operation GetRandomResult() : Result {
use q = Qubit();
H(q);
return M(q);
}
}
和 .csproj 文件:
<Project Sdk="Microsoft.Quantum.Sdk/0.16.2104138035">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<ExecutionTarget>ionq.qpu</ExecutionTarget>
<IQSharpLoadAutomatically>true</IQSharpLoadAutomatically>
</PropertyGroup>
</Project>
在Anaconda qsharp-env环境(Python 3.7.10)中运行ning上述Python代码的结果如下如下:
Simulated Result: 0
------------------------------------------------
Connected to Azure Quantum workspace ####### in location #####us.
Loading package Microsoft.Quantum.Providers.IonQ and dependencies...
Active target is now ionq.qpu
Submitting TestIONQ.GetRandomResult to target ionq.qpu...
Failed to submit Q# operation TestIONQ.GetRandomResult for execution.
Could not load file or assembly 'System.Text.Json, Version=5.0.0.0, Culture=neutral, PublicKeyToken=####token#####'. The system cannot find the file specified.
显然,连接到 Azure 和 Workspace 没有问题。事实上,我可以 运行 Python 中的集装箱船优化示例没问题。当调用 .simulate() 时,这对于 Python 代码的前半部分也能正常工作。
接下来,当我尝试通过更改这一行来绕过 IONQ QPU 并使用它自己的模拟器时:
qsharp.azure.target("ionq.simulator")
结果错误相同,结果如下:
Simulated Result: 1
------------------------------------------------
Connected to Azure Quantum workspace ######## in location #######.
Loading package Microsoft.Quantum.Providers.IonQ and dependencies...
Active target is now ionq.simulator
Submitting TestIONQ.GetRandomResult to target ionq.simulator...
Failed to submit Q# operation TestIONQ.GetRandomResult for execution.
Could not load file or assembly 'System.Text.Json, Version=5.0.0.0, Culture=neutral, PublicKeyToken='....token......'. The system cannot find the file specified.
Traceback (most recent call last):
File "ionq_sim_remote.py", line 18, in <module>
result = qsharp.azure.execute(GetRandomResult, jobName="Generate random bit")
File "F:\Python38\miniconda\envs\qsharp-env\lib\site-packages\qsharp\azure.py", line 137, in execute
if "error_code" in result: raise AzureError(result)
qsharp.azure.AzureError: {'error_code': 1010, 'error_name': 'JobSubmissionFailed', 'error_description': 'Failed to submit the job to the Azure Quantum workspace.'}
在 Azure 上使用 Visual Studio 中的 q# 代码片段在 Azure 上很容易使用此 运行 在命令行中使用显示的变体工作坊
az quantum execute --target-id ionq.qpu --job-name IONQ_test --resource-group ***rg name*** --workspace-name ***ws name*** --location **** -o table
事实上,与模拟器相比,这在实际 QPU 硬件上似乎有 运行(给出精确的 0.5/0.5 结果)。
Result Frequency
-------- ----------
0 0.49800000
1 0.50200000
但是然后从 Python 调用相同的 q# 代码 - 包括相同的 .csproj 文件似乎抛出这个JSON 文件错误 - 即使将 qsharp-env 加载到 Anaconda 中。如果我做了一些愚蠢的事情,我深表歉意-试图在这里学习。
顺便说一句,这 很好 作为解决问题的方法,不需要 Anaconda 环境或任何特殊的东西:
Python:
import os
os.system(f'powershell.exe az quantum execute --target-id ionq.qpu --job-name Pytest --resource-group **** --workspace-name **** --location **** -o table ')
而且在实际硬件上的结果肯定是 运行(花了很长时间):
Result Frequency
-------- ----------- -------------------------
0 0.53200000 ▐███████████ |
1 0.46800000 ▐█████████ |
@Joab.Ai,感谢您发布此问题!我们已经确定这是特定于最新版本的 qsharp (0.16.2104.138035
)。
虽然我们正在研究修复,但解决方法是降级您的 :qsharp
软件包版本
编辑:我们已经在最新版本中解决了这个问题!使用此命令更新到最新版本:
conda install -c quantum-engineering qsharp=0.16.2105.140472
或简单地 运行:
conda update -c quantum-engineering qsharp