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