Migrar seu Q# código para o QDK Moderno
O Azure Quantum Development Kit (QDK Moderno), lançado em janeiro de 2024, é o kit de desenvolvimento padrão Q# usado no Visual Studio Code e no portal do Azure Quantum. Para obter mais informações sobre os novos recursos e aprimoramentos, consulte Novidades no QDK Moderno.
Se você tiver programas existentes escritos para o Microsoft Quantum Development Kit (QDK clássico), pelo menos alguns elementos precisarão ser modificados para as novas APIs, processos e ferramentas. Além disso, há melhorias na sintaxe da Q# linguagem para tornar a codificação mais fácil e flexível.
Este artigo orienta você nos cenários mais comuns para colocar seu código em funcionamento no novo QDK. S
Preterindo o Visual Studio como uma plataforma de desenvolvimento
O QDK Moderno remove o suporte para o Visual Studio e as bibliotecas quânticas do .NET associadas. Se você tiver projetos existentes do Visual Studio, é altamente recomendável migrá-los para o QDK Moderno usando as diretrizes neste artigo. Para continuar a usar o QDK clássico para seus projetos, confira Continuar trabalhando no QDK clássico.
Importando módulos de um Q# arquivo
Para programas python que usam Q# arquivos (*.qs) para importar Q# funções e operações como módulos, a sintaxe de importação foi alterada.
No QDK Clássico, para importar e executar a Random()
operação do arquivo source.qs
:
namespace Sample {
operation Random() : Result {
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
return result
}
}
você usaria a sintaxe de importação padrão do Python:
from Sample import Random
print(Random.simulate())
com o requisito de que source.qs
e seu programa Python estavam na mesma pasta.
Para importar a mesma operação com o QDK Moderno, você define um Q# projeto, que permite organizar seus arquivos e bibliotecas de origem de maneira mais eficiente e lógica. Para obter etapas detalhadas para definir um Q# projeto, consulte Trabalhando com Q# projetos.
Depois de configurar suas pastas de projeto e criar um arquivo de manifesto simples, use qsharp.init
para apontar para a raiz do projeto e qsharp.eval
para acessar os arquivos de origem e importar o <namespace>.<>operation_name.
qsharp.init(project_root = '/MyProjectFolder')
print(qsharp.eval("Sample.Random()"))
Se a operação ou a função que você está importando receber valores de entrada, eles também poderão ser passados:
print(qsharp.eval("Sample.Random(4)"))
Executando seu programa no simulador local
A maioria dos simuladores na memória do QDK Clássico foi preterida, deixando o simulador esparso como o simulador local padrão no VS Code e no portal do Azure Quantum.
Simuladores preteridos:
- Simulador de estado completo
- Simulador de ruído
- Simulador de rastreamento
- Simulador do Toffoli
Para executar o simulador esparso padrão:
Cenário | Método |
---|---|
Em um Q# programa no VS Code | Selecione Executar Q# arquivo |
Em uma célula do notebook Python | result=qsharp.eval("EntryPointOperation()") ou result=qsharp.run("EntryPointOperation()", shots=##) |
Em uma célula do %%qsharp notebook |
EntryPointOperation() |
Versão do qubit imposta
O QDK Moderno impõe o requisito de que os qubits estejam no solo ou no estado |0⟩ antes de serem liberados no final de seu escopo. Isso é para impedir que qubits possivelmente sejam reutilizados em um estado inesperado ao executar programas em hardware quântico.
Por exemplo, o código a seguir dispara um erro de runtime:
operation MyOperation() : Result {
use q = Qubit();
X(q);
return M(q);
}
e precisaria ser modificado para redefinir o qubit antes de retornar a medida:
operation MyOperation() : Result {
use q = Qubit();
X(q);
let r = M(q);
Reset(q);
return r;
}
ou use uma operação que redefine o qubit como parte da medição:
open Microsoft.Quantum.Measurement;
operation MyOperation() : Result {
use q = Qubit();
X(q);
return MResetZ(q);
}
Configurar o perfil base
Ao contrário do simulador local, os destinos de hardware do Azure Quantum ainda não dão suporte aos recursos completos necessários para executar todos os Q# programas. Se você estiver enviando um trabalho para o Azure Quantum, antes de compilar o programa, precisará definir seu perfil de destino para informar Q# quais recursos o hardware de destino dá suporte. Atualmente, somente programas compatíveis com o Perfil Base do QIR podem ser enviados para o Azure Quantum. Observe que, para executar o código no simulador local, qualquer configuração de perfil pode ser usada.
Código VS
O VS Code exibe o modo de perfil na barra de status na parte inferior dos Q# arquivos, QIR: Base ou Irrestrito. O modo irrestrito é mais útil para executar o código no simulador. Se você estiver enviando um trabalho para o Azure Quantum e receber um aviso de que um programa não está definido para o perfil Base, selecione Irrestrito na barra de status e selecione QIR: Base como o perfil.
Jupyter Notebooks e Python
Para definir o perfil Base, use a qsharp.init
função :
qsharp.init(target_profile=qsharp.TargetProfile.Base)
Observação
- A
qsharp.init
função substitui o comando magic %azure.target-capability . - Se você redefinir o perfil de destino, precisará executar novamente suas Q# células ou importações antes de compilar.
Compilando um Q# programa para enviar ao Azure Quantum
Com o QDK moderno, seu programa precisa ser compilado antes de enviar o trabalho para o Azure Quantum.
Observação
Para cenários passo a passo para enviar trabalhos ao Azure Quantum usando Q# programas, programas Python ou Jupyter Notebooks, consulte Enviar trabalhos para o Azure Quantum.
Código VS
Q#os programas no VS Code compilam seu programa automaticamente quando você seleciona um destino de provedor em seu workspace e seleciona Enviar programa atualQ#. Se houver erros do compilador, você poderá depurar o arquivo pressionando F5. Para obter mais informações, consulte Enviar trabalhos para o Azure Quantum.
Jupyter Notebooks e Python
Para programas Jupyter Notebook e Python que usam a Workspace
classe para se conectar ao Azure Quantum, você precisa compilar seu programa e enviá-lo para o Azure Quantum com o envio do trabalho.
Execute o Q# código que você importou ou escreveu em uma
%%qsharp
célula.Use a
qsharp.compile
função , passando a Q# operação ou a função a ser usada como o ponto de entrada. Por exemplo, para este Q# programa:operation MyOperation() : Result { use q = Qubit(); H(q); let r = M(q); Reset(q); return r; }
você passaria a
MyOperation()
operação como:MyProgram = qsharp.compile("MyOperation()")
O resultado
MyProgram
compilado é então passado para o Azure Quantum com atarget.submit
função :job = target.submit(MyProgram, "job name", ...)
CLI do Azure
Você também pode usar a CLI do Azure para se conectar e enviar Trabalhos e Q# Python ao Azure Quantum. Para esse cenário, você deve salvar seu programa compilado como um arquivo de texto. Para obter o procedimento passo a passo, consulte Enviar trabalhos para o Azure Quantum.
Conectando-se ao Azure Quantum
Para Q# programas no VS Code, você pode se conectar ao workspace do Azure Quantum e enviar trabalhos dentro do VS Code.
Para programas python e Jupyter Notebook, o método de conexão padrão é a azure.quantum.Workspace
classe , que substitui os comandos magic IQ#%azure
preteridos e o qsharp.azure
módulo . Para obter exemplos de todos esses comandos, consulte Enviar trabalhos para o Azure Quantum.
Comando magic preterido ou API | Uso |
---|---|
%azure.connect qsharp.azure.connect() |
wksp = azure.quantum.Workspace( resource_id="", location="") |
%azure.target qsharp.azure.target() |
target = wksp.get_targets("<target_name>") |
%azure.execute qsharp.azure.execute() |
job = target.submit(...) E/S sem bloqueio |
%azure.submit qsharp.azure.submit() |
job = target.submit(<QirInputData>, <jobName>, input_params={"count: <##>"}) |
%azure.jobs qsharp.azure.jobs() |
wksp.list_jobs() |
%azure.output qsharp.azure.output() |
job.get_results() |
%azure. status qsharp.azure. status() |
job.details. status |
%azure.quotas | wksp.get_quotas() |
Outros comandos mágicos preteridos
Comando magic preterido | ||
---|---|---|
%check_kata | Preterido | |
%chemistry.broombridge | Preterido | |
%chemistry.encode | Preterido | |
%chemistry.fh.add_terms | Preterido | |
%chemistry.fh.load | Preterido | |
%chemistry.inputstate.load | Preterido | |
%config | Preterido | |
%debug | Preterido | |
%experimental.build_info | Preterido | |
%kata | Preterido | |
%lsmagic | Preterido | |
%lsopen | Preterido | |
%noise_model | Preterido | |
%package | Preterido | |
%performance | Preterido | |
%project | Preterido | |
%who | Preterido | |
%workspace | Preterido |
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de