Skip to content
This repository has been archived by the owner on Jan 12, 2024. It is now read-only.

HalfMoon example on Quantum Hardware #764

Open
wadeschulz opened this issue Jan 23, 2023 · 2 comments
Open

HalfMoon example on Quantum Hardware #764

wadeschulz opened this issue Jan 23, 2023 · 2 comments

Comments

@wadeschulz
Copy link

wadeschulz commented Jan 23, 2023

Describe the bug
We are trying to get the Azure Quantum ML classifier with the HalfMoon example running on quantum hardware/Azure simulator, but are running into issues with the job submission using the Python host file. Trying to determine if we're just doing something incorrectly in the submission or if running this on the remote system is not possible. Same error occurs with other Quantum targets, but works fine with the simulate command locally.

To Reproduce
Steps to reproduce the behavior:

  1. Clone or copy the HalfMoon classifier code
  2. Change the "simulate" calls to the HalfMoon objectives to:
qsharp.azure.execute(
      TrainHalfMoonModel,
      trainingVectors=data['TrainingData']['Features'],
      trainingLabels=data['TrainingData']['Labels'],
      initialParameters=parameter_starting_points,
      shots=1000,
      jobName=f"Train half moon model"
   )
  1. Attempt to run on IonQ simulator target
  2. See error
{'text/plain': 'Connecting to Azure Quantum...', 'application/x-qsharp-data': '"Connecting to Azure Quantum..."'}
Connected to Azure Quantum workspace refactorquantum in location eastus.
Loading package Microsoft.Quantum.Providers.IonQ and dependencies...
Active target is now ionq.simulator
The Q# operation Microsoft.Quantum.Samples.TrainHalfMoonModel could not be compiled as an entry point for job execution.
Invalid snippet code
fail: Microsoft.Quantum.IQSharp.AzureClient.EntryPointGenerator[0]
      QS6235 (/entrypoint.qs:Microsoft.VisualStudio.LanguageServer.Protocol.Range): Multi-dimensional arrays are not supported in entry point arguments.
fail: Microsoft.Quantum.IQSharp.AzureClient.EntryPointGenerator[0]
      QS6235 (/entrypoint.qs:Microsoft.VisualStudio.LanguageServer.Protocol.Range): Multi-dimensional arrays are not supported in entry point arguments.
fail: Microsoft.Quantum.IQSharp.AzureClient.EntryPointGenerator[0]
      QS5027 (/entrypoint.qs:Microsoft.VisualStudio.LanguageServer.Protocol.Range): The callable TrainHalfMoonModel requires runtime capabilities which are not supported by the target ionq.simulator.
      Result Opacity: Transparent
      Classical Capability: Full
fail: Microsoft.Quantum.IQSharp.AzureClient.EntryPointGenerator[0]
      QS6238 ((null):Microsoft.VisualStudio.LanguageServer.Protocol.Range): Missing entry point. Execution on a quantum processor requires that a Q# entry point is defined using the @EntryPoint() attribute. Any C# driver code should be defined in a separate project.
fail: Microsoft.Quantum.IQSharp.AzureClient.EntryPointGenerator[0]
      Error compiling entry point for operation Microsoft.Quantum.Samples.TrainHalfMoonModel.
fail: Microsoft.Quantum.IQSharp.AzureClient.AzureClient[0]
      The Q# operation Microsoft.Quantum.Samples.TrainHalfMoonModel could not be compiled as an entry point for job execution.
      Microsoft.Quantum.IQSharp.Common.CompilationErrorsException: Invalid snippet code
         at Microsoft.Quantum.IQSharp.AzureClient.EntryPointGenerator.Generate(String operationName, String executionTarget, TargetCapability capability, Boolean generateQir) in D:\a\1\s\submodules\iqsharp\src\AzureClient\EntryPoint\EntryPointGenerator.cs:line 166
         at Microsoft.Quantum.IQSharp.AzureClient.AzureClient.SubmitOrExecuteJobAsync(IChannel channel, AzureSubmissionContext submissionContext, Boolean execute, CancellationToken cancellationToken) in D:\a\1\s\submodules\iqsharp\src\AzureClient\AzureClient.cs:line 435
/entrypoint.qs(5,69): error QS6235: Multi-dimensional arrays are not supported in entry point arguments.
/entrypoint.qs(5,125): error QS6235: Multi-dimensional arrays are not supported in entry point arguments.
/entrypoint.qs(7,32): error QS5027: The callable TrainHalfMoonModel requires runtime capabilities which are not supported by the target ionq.simulator.
Result Opacity: Transparent
Classical Capability: Full
(1,1): error QS6238: Missing entry point. Execution on a quantum processor requires that a Q# entry point is defined using the @EntryPoint() attribute. Any C# driver code should be defined in a separate project.
Traceback (most recent call last):
  File "run_remote.py", line 47, in <module>
    (parameters, bias) = qsharp.azure.execute(
  File "/Users/***/miniconda3/envs/quantum/lib/python3.9/site-packages/qsharp/azure.py", line 161, in execute
    if "error_code" in result: raise AzureError(result)
qsharp.azure.AzureError: {'error_code': 1010, 'error_name': 'InvalidEntryPoint', 'error_description': 'The specified Q# operation cannot be used as an entry point for Azure Quantum job submission.'}

Additional context
Add any other context about the problem here.

@NikitaChernevskiy
Copy link

Same issue - have you found a solution?

@NikitaChernevskiy
Copy link

Well, if it is still actual - I tried to pass arrays as 1-dimensional. I parsed them with this:

    parameter_starting_points = [
        [0.060057, 3.00522, 2.03083, 0.63527, 1.03771, 1.27881, 4.10186, 5.34396],
        [0.586514, 3.371623, 0.860791, 2.92517, 1.14616, 2.99776, 2.26505, 5.62137],
        [1.69704, 1.13912, 2.3595, 4.037552, 1.63698, 1.27549, 0.328671, 0.302282],
        [5.21662, 6.04363, 0.224184, 1.53913, 1.64524, 4.79508, 1.49742, 1.545]
    ]

    # Submit the Q# operation to Azure Quantum
    trainingVectors=data['TrainingData']['Features']
    trainingLabels=data['TrainingData']['Labels']
    initialParameters=parameter_starting_points
    
    data1 = [row[0] for row in trainingVectors]
    data2 = [row[1] for row in trainingVectors]
    
    _1 = [row[0] for row in initialParameters]
    _2 = [row[1] for row in initialParameters]
    _3 = [row[3] for row in initialParameters]
    _4 = [row[4] for row in initialParameters]
and then just passed them with this job

(parameters, bias) = qsharp.azure.execute(TrainHalfMoonModel, data1=data1, data2=data2, trainingLabels=trainingLabels, _1=_1, _2=_2, _3=_3, _4=_4, shots=100, jobName="Train", timeout=18000)


In q# I just combined them back
    operation TrainHalfMoonModel(
        data1 : Double[],
        data2 : Double[],
        trainingLabels : Int[],
        _1 : Double[],
        _2 : Double[],
        _3 : Double[],
        _4 : Double[],
    ) : (Double[], Double) {
        let trainingVectorsArray = Zipped(data1, data1);
        let trainingVectors = Mapped(CombineFunction, trainingVectorsArray);

        let initialParametersArray = Zipped4(_1, _2, _3, _4);
        let initialParameters = Mapped(CombineFunction4, initialParametersArray);
        
        ..........................

And few functions:

    function CombineFunction(a: Double, b: Double): Double[] {
        return [a, b];
    }

    function CombineFunction4(a: Double, b: Double, c: Double, d: Double): Double[] {
        return [a, b, c, d];
    }

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants