Conheço muitos cientistas de dados, incluindo eu mesmo, que realizam a maior parte do trabalho deles em um computador habilitado para GPU, localmente ou na nuvem, por meio de Jupyter Notebooks ou algum IDE Python. Durante os meus dois anos como engenheiro de software de IA/ML, isso é exatamente o que eu estava fazendo, preparando dados em um computador sem GPU e usando a VM da GPU na nuvem para fazer o treinamento.
Por outro lado, você provavelmente já ouviu falar do Azure Machine Learning, um serviço de plataforma especial para realizar ML. No entanto, se você começar a examinar alguns tutoriais de introdução, terá a impressão de que o uso do Azure ML cria uma grande sobrecarga desnecessária, e o processo não é ideal. Por exemplo, o script de treinamento no exemplo acima é criado como um arquivo de texto em uma célula do Jupyter, sem conclusão de código ou qualquer maneira conveniente de executá-lo localmente ou por depuração. Essa sobrecarga adicional foi o motivo pelo qual não o usamos muito em nossos projetos.
No entanto, recentemente descobri que há uma Extensão do Visual Studio Code para o Azure ML. Com essa extensão, você pode desenvolver seu código de treinamento diretamente no VS Code, executá-lo localmente e, em seguida, enviar o mesmo código para ser treinado em um cluster com apenas alguns cliques de um botão. Fazendo isso, você obtém vários benefícios importantes:
Espero que você esteja convencido a experimentar o Azure ML por conta própria! Esta é a melhor maneira de começar:
Tudo no Azure ML é organizado em torno de um workspace. Ele é um ponto central para o qual você envia seus experimentos e em que armazena seus dados e modelos resultantes. Também há um Portal do Azure ML Portal especial que fornece interface da Web para seu workspace; de lá, você pode executar muitas operações, monitorar seus experimentos, métricas e assim por diante.
Você pode criar um workspace por meio da interface da Web do portal do Azure (confira instruções passo a passo) ou usando a CLI do Azure (instruções):
az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazml
O workspace contém alguns recursos de computação. Depois que você tiver um script de treinamento, poderá enviar o experimento para o workspace e especificar o destino de computação. Isso garantirá que o experimento seja executado lá e armazenará todos os resultados do experimento no workspace para referência futura.
Em nosso exemplo, mostraremos como resolver um problema muito tradicional de reconhecimento de dígitos manuscritos usando o conjunto de dados do MNIST. Da mesma maneira, você poderá executar outros scripts de treinamento por conta própria.
Nosso repositório de exemplos contém o script de treinamento simples do MNIST train_local.py
. Esse script baixa o conjunto de dados do MNIST do OpenML e, em seguida, usa a LogisticRegression
do SKLearn para treinar o modelo e imprimir a precisão resultante:
mnist = fetch_openml('mnist_784')
mnist['target'] = np.array([int(x) for x in mnist['target']])
shuffle_index = np.random.permutation(len(mist['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('Overall accuracy:', acc)
É claro que estamos usando a Regressão Logística apenas como ilustração, não implicando que é uma boa maneira de resolver o problema…
Você pode simplesmente executar esse script localmente e ver o resultado. No entanto, se optarmos por usar o Azure ML, ele nos oferecerá dois principais benefícios:
from azureml.core.run import Run
...
try:
run = Run.get_submitted_run() run.log('accuracy', acc)
except:
pass
A versão modificada do nosso script é chamada de train_universal.py
(é apenas um pouco mais complicada do que o código apresentado acima); ela pode ser executada localmente (sem o Azure ML) e no recurso de computação remota.
Para executá-la no Azure ML do VS Code, siga estas etapas:
Verifique se sua Extensão do Azure está conectada à sua conta de nuvem. Selecione o ícone do Azure no menu esquerdo. Se você não estiver conectado, verá uma notificação na parte inferior direita oferecendo que você se conecte (veja a imagem). Clique nela e entre pelo navegador. Você também pode pressionar Ctrl-Shift-P para abrir a paleta de comandos e digitar Entrada no Azure.
Depois disso, você deverá ser capaz de ver seu workspace na seção MACHINE LEARNING da barra do Azure:
Aqui você deverá ver diferentes objetos dentro de seu workspace: recursos de computação, experimentos etc.
Volte para a lista de arquivos, clique com o botão direito do mouse em train_universal.py
e selecione Azure ML: executar como experimento no Azure.
Confirme sua assinatura do Azure e seu workspace e, em seguida, selecione Criar experimento:
Crie uma Computação e uma configuração de computação:
Em seguida, você verá uma janela com a descrição JSON do próximo experimento. Você pode editar as informações lá, por exemplo, alterar o experimento ou o nome do cluster e ajustar alguns parâmetros. Quando estiver pronto, clique em Enviar Experimento:
Depois que o experimento for enviado com êxito no VS Code, você receberá o link para a página do Portal do Azure ML com o progresso e os resultados do experimento.
Você também pode localizar seu experimento na guia Experimentos no Portal do Azure ML ou na barra do Azure Machine Learning no VS Code:
Se desejar executar o experimento novamente após ajustar alguns parâmetros em seu código, esse processo será muito mais rápido e fácil. Ao clicar com o botão direito do mouse no arquivo de treinamento, você verá uma nova opção de menu Repetir última execução; basta selecioná-la e o experimento será enviado imediatamente.
Em seguida, você verá os resultados da métrica de todas as execuções no portal do Azure ML, como na captura de tela acima.
Agora você sabe que o envio de execuções para o Azure ML não é complicado; além disso, você ganha alguns brindes (como armazenar todas as estatísticas de suas execuções, seus modelos etc.) gratuitamente.
Você pode ter percebido que, em nosso caso, o tempo que leva para o script ser executado no cluster é maior do que executar localmente – pode levar até mesmo alguns minutos. É claro que há alguma sobrecarga no empacotamento do script e de todo o ambiente em um contêiner e no envio do script para a nuvem. Se o cluster for definido para reduzir automaticamente para 0 nós, poderá haver alguma sobrecarga adicional devido à inicialização da VM, e tudo isso será perceptível quando você tiver um pequeno script de exemplo que, de outra maneira, levaria alguns segundos para ser executado. No entanto, em cenários da vida real, quando o treinamento leva dezenas de minutos e, às vezes, muito mais, essa sobrecarga se torna quase irrelevante, especialmente considerando os aprimoramentos de velocidade que você pode esperar obter do cluster.
Agora que você sabe como enviar scripts para execução em um cluster remoto, você pode começar a aproveitar o Azure ML em seu trabalho diário. Com ele, você desenvolve scripts em um PC normal e, em seguida, os agenda para execução no cluster ou na VM da GPU automaticamente, mantendo todos os resultados em um único lugar.
No entanto, há mais vantagens em usar o Azure ML do que apenas essas duas. O Azure ML também pode ser usado para o armazenamento de dados e a manipulação de conjunto de dados, tornando extremamente fácil que diferentes scripts de treinamento acessem os mesmos dados. Além disso, você pode enviar experimentos automaticamente por meio da API, variando os parâmetros-e, portanto, executando uma otimização de hiperparâmetro. Além disso, há uma tecnologia específica criada no Azure ML chamada Hiperdrive, que faz uma pesquisa de hiperparâmetros mais inteligente. Falarei mais sobre esses recursos e tecnologias em minhas próximas postagens.
Você pode achar os seguintes cursos do Microsoft Learn úteis, caso queira saber mais: