Conheço muitos cientistas de dados — e talvez eu mesmo faça parte desse grupo — que trabalham em máquinas com GPU, locais ou virtuais, no cloud, seja através do Jupyter Notebook ou de um ambiente de desenvolvimento Python. Trabalhando como especialista desenvolvedor em AI/ML por 2 anos, era assim que eu fazia, preparando os dados em um servidor comum ou estação de trabalho, e rodando o treinamento em uma máquina virtual com GPU no Azure.
Claro, todos nós já ouvimos falar de — uma plataforma de nuvem dedicada para aprendizado de máquina. Contudo, após o primeiro olhar em , parece que o Azure ML vai gerar mais problemas do que soluções. Por exemplo, no exemplo de treinamento mencionado, o aprendizado no Azure ML é iniciado a partir do Jupyter Notebook, sendo que o próprio script de treinamento é sugerido para ser criado e editado como um arquivo de texto em uma das células — sem utilizar autocompletar, destaque de sintaxe e outras vantagens de um ambiente de desenvolvimento adequado. Por essa razão, não utilizamos o Azure ML seriamente em nosso trabalho por um longo tempo.
No entanto, recentemente descobri uma forma de começar a usar o Azure ML de forma eficaz em meu trabalho! Você está curioso pelos detalhes?

O segredo principal é a . Ela permite que você desenvolva scripts de treinamento diretamente no VS Code, aproveitando todas as vantagens do ambiente — e você pode até mesmo rodar o script localmente, e depois apenas enviá-lo para treinamento em um cluster Azure ML com alguns cliques do mouse. Conveniente, não é?
Com isso, você obtém as seguintes vantagens ao usar o Azure ML:
- Você pode trabalhar a maior parte do tempo localmente em sua máquina em um IDE confortável, e usar GPU apenas para o treinamento do modelo. O pool de recursos de treinamento pode se ajustar automaticamente à carga necessária, e ao definir um número mínimo de nós como 0, você pode iniciar uma máquina virtual "sob demanda" ao ter tarefas de treinamento.
- Você pode armazenar todos os resultados do treinamento em um só lugar, incluindo métricas alcançadas e modelos gerados — não há necessidade de inventar um sistema ou ordem para armazenar todos os resultados.
- Ao mesmo tempo, várias pessoas podem trabalhar em um mesmo projeto — eles podem usar o mesmo cluster computacional, todos os experimentos serão enfileirados, e também poderão ver os resultados dos experimentos uns dos outros. Um desses cenários é o uso do Azure ML no ensino de Deep Learning, onde, em vez de fornecer a cada aluno uma máquina virtual com GPU, você pode criar um único cluster que será utilizado de forma centralizada. Além disso, uma tabela geral de resultados com a precisão do modelo pode servir como um bom elemento competitivo.
- Com o Azure ML, é fácil conduzir séries de experimentos, como por exemplo a otimização de hiperparâmetros — isso pode ser feito com algumas linhas de código, sem a necessidade de realizar séries de experimentos manualmente.
Espero ter convencido você a experimentar o Azure ML! Aqui está como você pode começar:
- Certifique-se de que você tem instalado , assim como a extensão e
- Clone o repositório — ele contém algum código de demonstração para treinar um modelo de reconhecimento de dígitos manuscritos no conjunto de dados MNIST.
- Abra o repositório clonado no Visual Studio Code.
- Continue lendo!
Azure ML Workspace e Azure ML Portal
O Azure ML é organizado em torno do conceito de área de trabalho — Workspace. Na área de trabalho, podem ser armazenados dados, experimentos são enviados para treinamento e os resultados do treinamento — métricas e modelos obtidos. Você pode ver o que está dentro da área de trabalho através do — e de lá você pode realizar muitas operações, desde o upload de dados até o monitoramento de experimentos e o deployment de modelos.
Você pode criar uma área de trabalho através da interface web (veja ), ou usando a linha de comando do Azure CLI ():
az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazmlA área de trabalho está também relacionada a alguns recursos computacionais (Compute). Criando um script para treinar o modelo, você pode enviar o experimento para execução na área de trabalho, e especificar compute target — assim, o script será empacotado, executado no ambiente computacional adequado, e todos os resultados do experimento serão salvos na área de trabalho para análise e uso posterior.
Script de treinamento para MNIST
Consideremos a clássica tarefa de usando o conjunto de dados MNIST. Da mesma forma, no futuro você poderá executar quaisquer scripts de treinamento que desejar.
Em nosso repositório, há um script train_local.py, que treina um modelo simples de regressão linear usando a biblioteca SkLearn. Claro, eu entendo que essa não é a melhor maneira de resolver o problema — usamos isso como exemplo, como o mais simples.
O script primeiro baixa os dados MNIST do OpenML e depois utiliza a classe LogisticRegression para treinar o modelo, e então imprime a precisão obtida:
mnist = fetch_openml('mnist_784')
mnist['target'] = np.array([int(x) for x in mnist['target']])
shuffle_index = np.random.permutation(len(mnist['data']))
X, y = mnist['data'][shuffle_index], mnist['target'][shuffle_index]
X_train, X_test, y_train, y_test =
train_test_split(X, y, test_size = 0.3, random_state = 42)
lr = LogisticRegression()
lr.fit(X_train, y_train)
y_hat = lr.predict(X_test)
acc = np.average(np.int32(y_hat == y_test))
print('A precisão geral:', acc)Você pode executar o script no seu computador e em alguns segundos obterá o resultado.
Executando o script no Azure ML
Se por acaso estivermos executando o script de treinamento através do Azure ML, teremos duas principais vantagens:
- Executar o treinamento em um recurso computacional arbitrário, que geralmente é mais poderoso do que um computador local. Durante isso, o Azure ML mesmo cuidará para empacotar nosso script com todos os arquivos do diretório atual em um contêiner docker, instalar as dependências necessárias e enviá-lo para execução.
- Registrar os resultados em um único repositório dentro do espaço de trabalho do Azure ML. Para aproveitar essa capacidade, precisamos adicionar algumas linhas de código ao nosso script para registrar a precisão resultante:
from azureml.core.run import Run
...
try:
run = Run.get_submitted_run()
run.log('accuracy', acc)
except:
passA versão correspondente do script é chamada de train_universal.py (ela é um pouco mais elaborada do que a mencionada acima, mas não muito). Este script pode ser executado tanto localmente quanto em um recurso computacional remoto.
Para executá-lo no Azure ML a partir do VS Code, você deve fazer o seguinte:
Certifique-se de que a extensão do Azure está conectada à sua assinatura. Selecione o ícone do Azure no menu à esquerda. Se você não estiver conectado, uma notificação aparecerá no canto inferior direito (), ao clicar nela você poderá entrar através do navegador. Você também pode pressionar Ctrl-Shift-P para abrir o terminal do VS Code, e digitar Azure Sign In.
Depois disso, na seção do Azure (ícone à esquerda) encontre a seção MACHINE LEARNING:

Aqui você deve ver diferentes grupos de objetos dentro da área de trabalho: recursos computacionais, experimentos, etc.
- Vá para a lista de arquivos e clique com o botão direito no script
train_universal.pye selecione Azure ML: Execute como experimento no Azure.

- Após isso, uma série de diálogos na área de comando do VS Code seguirá: confirme a assinatura e a área de trabalho do Azure ML em uso, e escolha Criar novo experimento:



Escolha criar novo recurso computacional Criar Novo Computador:
- Compute define o recurso computacional no qual o treinamento ocorrerá. Você pode escolher um computador local ou um cluster em nuvem AmlCompute. Recomendo criar um cluster de máquinas escalável
STANDARD_DS3_v2, com um número mínimo de máquinas 0 (e o máximo pode ser 1 ou mais, dependendo das suas necessidades). Isso pode ser feito através da interface do VS Code, ou previamente através do .

- Compute define o recurso computacional no qual o treinamento ocorrerá. Você pode escolher um computador local ou um cluster em nuvem AmlCompute. Recomendo criar um cluster de máquinas escalável
Em seguida, é necessário escolher a configuração Configuração de Computação, que determina os parâmetros do contêiner criado para o treinamento, em particular, todas as bibliotecas necessárias. No nosso caso, como estamos usando Scikit Learn, escolhemos SkLearn, e então simplesmente confirmamos a lista proposta de bibliotecas pressionando Enter. Se você estiver usando bibliotecas adicionais, deve indicá-las aqui.


Após isso, uma janela com um arquivo JSON, descrevendo o experimento, será aberta. É possível corrigir alguns parâmetros - por exemplo, o nome do experimento. Depois disso, clique no link Enviar Experimento dentro desse arquivo:

- Após enviar o experimento com sucesso através do VS Code, você verá um link à direita na área de notificações para , onde poderá acompanhar o status e os resultados do experimento.

Posteriormente, você sempre poderá encontrá-lo na seção Experimentos , ou na seção Azure Machine Learning na lista de experimentos:

- Se você fez alguma correção no código ou alterou os parâmetros após isso, a execução do experimento novamente será muito mais rápida e simples. Clicando com o botão direito no arquivo, você verá uma nova opção de menu Repetir a última execução — basta selecioná-la e o experimento será iniciado imediatamente:

Os resultados das métricas de todas as execuções sempre poderão ser encontrados no Azure ML Portal, não é necessário anotá-los.
Agora você sabe que executar experimentos com o Azure ML é fácil e indolor, e ainda assim você obtém uma série de vantagens agradáveis.
Mas você pode ter notado algumas desvantagens. Por exemplo, para rodar o script, foi necessário muito mais tempo. Claro, embalar o script em um contêiner e implantá-lo no servidor leva tempo. Se, ao mesmo tempo, o cluster for reduzido para 0 nós, levará ainda mais tempo para iniciar a máquina virtual, e tudo isso é bastante perceptível quando experimentamos em tarefas simples como MNIST, que são resolvidas em poucos segundos. No entanto, na vida real, quando o treinamento dura várias horas, dias ou semanas, esse tempo adicional se torna irrelevante, especialmente em comparação com o desempenho significativamente maior que um cluster computacional pode oferecer.
E agora?
Espero que, após a leitura deste artigo, você consiga e comece a usar o Azure ML em seu trabalho para executar scripts, gerenciar recursos computacionais e armazenar resultados de forma centralizada. No entanto, o Azure ML pode lhe oferecer ainda mais benefícios!
Dentro da área de trabalho, você pode armazenar dados, criando assim um repositório central para todas as suas tarefas, o que torna fácil acessá-los. Além disso, você pode executar experimentos não a partir do Visual Studio Code, mas usando a API — isso pode ser especialmente útil se você precisar realizar otimização de hiperparâmetros e quiser executar o script várias vezes com diferentes parâmetros. Além disso, o Azure ML contém uma tecnologia especial , que permite fazer buscas e otimizações de hiperparâmetros mais sofisticadas. Farei mais comentários sobre essas possibilidades em minha próxima postagem.
Recursos Úteis
Para um estudo mais detalhado sobre o Azure ML, os seguintes cursos do Microsoft Learn podem ser úteis:
Fonte: habr.com



