.. _sec_aws: Usando instâncias AWS EC2 ========================= Nesta seção, mostraremos como instalar todas as bibliotecas em uma máquina Linux bruta. Lembre-se de que em :numref:`sec_sagemaker` discutimos como usar o Amazon SageMaker, enquanto construir uma instância sozinho custa menos na AWS. O passo a passo inclui várias etapas: 1. Solicite uma instância GPU Linux do AWS EC2. 2. Opcionalmente: instale CUDA ou use um AMI com CUDA pré-instalado. 3. Configure a versão de GPU MXNet correspondente. Este processo se aplica a outras instâncias (e outras nuvens) também, embora com algumas pequenas modificações. Antes de prosseguir, você precisa criar uma conta AWS, consulte :numref:`sec_sagemaker` para mais detalhes. Criação e execução de uma instância EC2 --------------------------------------- Depois de fazer login em sua conta AWS, clique em “EC2” (marcado pela caixa vermelha em :numref:`fig_aws`) para ir para o painel EC2. .. _fig_aws: .. figure:: ../img/aws.png :width: 400px Abra o console EC2. :numref:`fig_ec2` mostra o painel EC2 com informações confidenciais da conta esmaecidas. .. _fig_ec2: .. figure:: ../img/ec2.png :width: 700px Painel EC2. Presetting Location ~~~~~~~~~~~~~~~~~~~ Select a nearby data center to reduce latency, e.g., “Oregon” (marked by the red box in the top-right of :numref:`fig_ec2`). If you are located in China, you can select a nearby Asia Pacific region, such as Seoul or Tokyo. Please note that some data centers may not have GPU instances. Increasing Limits ~~~~~~~~~~~~~~~~~ Before choosing an instance, check if there are quantity restrictions by clicking the “Limits” label in the bar on the left as shown in :numref:`fig_ec2`. :numref:`fig_limits` shows an example of such a limitation. The account currently cannot open “p2.xlarge” instance per region. If you need to open one or more instances, click on the “Request limit increase” link to apply for a higher instance quota. Generally, it takes one business day to process an application. Prédefinindo localização ~~~~~~~~~~~~~~~~~~~~~~~~ Selecione um data center próximo para reduzir a latência, por exemplo, “Oregon” (marcado pela caixa vermelha no canto superior direito de: numref: ``fig_ec2``). Se você estiver na China, você pode selecionar uma região Ásia-Pacífico próxima, como Seul ou Tóquio. Observe que alguns data centers podem não ter instâncias de GPU. Limites crescentes ~~~~~~~~~~~~~~~~~~ Antes de escolher uma instância, verifique se há quantidade restrições clicando no rótulo “Limites” na barra à esquerda, conforme mostrado em :numref:`fig_ec2`. :numref:`fig_limits` mostra um exemplo de tal limitação. A conta atualmente não pode abrir a instância “p2.xlarge” por região. Se você precisa abrir uma ou mais instâncias, clique no link “Solicitar aumento de limite” para se inscrever para uma cota de instância maior. Geralmente, leva um dia útil para processar um aplicativo. .. _fig_limits: .. figure:: ../img/limits.png :width: 700px Restrições de quantidade de instância. Iniciando instância ~~~~~~~~~~~~~~~~~~~ Em seguida, clique no botão “Launch Instance” marcado pela caixa vermelha em :numref:`fig_ec2` para iniciar sua instância. Começamos selecionando um AMI adequado (AWS Machine Image). Digite “Ubuntu” na caixa de pesquisa (marcada pela caixa vermelha em :numref:`fig_ubuntu`). .. _fig_ubuntu: .. figure:: ../img/ubuntu-new.png :width: 700px Escolha um sistema operacional. EC2 fornece muitas configurações de instância diferentes para escolher. Isso às vezes pode parecer opressor para um iniciante. Aqui está uma tabela de máquinas adequadas: +------+-------------+-------------------------------+ | Name | GPU | Notes | +======+=============+===============================+ | g2 | Grid K520 | ancient | +------+-------------+-------------------------------+ | p2 | Kepler K80 | old but often cheap as spot | +------+-------------+-------------------------------+ | g3 | Maxwell M60 | good trade-off | +------+-------------+-------------------------------+ | p3 | Volta V100 | high performance for FP16 | +------+-------------+-------------------------------+ | g4 | Turing T4 | inference optimized FP16/INT8 | +------+-------------+-------------------------------+ Todos os servidores acima vêm em vários sabores, indicando o número de GPUs usadas. Por exemplo, um p2.xlarge tem 1 GPU e um p2.16xlarge tem 16 GPUs e mais memória. Para obter mais detalhes, consulte a `documentação do AWS EC2 `__ ou uma `página de resumo `__. Para fins de ilustração, um p2.xlarge será suficiente (marcado na caixa vermelha de :numref:`fig_p2x`). **Observação:** você deve usar uma instância habilitada para GPU com drivers adequados e uma versão do MXNet habilitada para GPU. Caso contrário, você não verá nenhum benefício em usar GPUs. .. _fig_p2x: .. figure:: ../img/p2x.png :width: 700px Escolhendo uma instância. Até agora, concluímos as duas primeiras das sete etapas para iniciar uma instância EC2, conforme mostrado na parte superior de :numref:`fig_disk`. Neste exemplo, mantemos as configurações padrão para as etapas “3. Configurar Instância”, “5. Adicionar Tags” e “6. Configurar Grupo de Segurança”. Toque em “4. Adicionar armazenamento” e aumente o tamanho do disco rígido padrão para 64 GB (marcado na caixa vermelha de :numref:`fig_disk`). Observe que o CUDA sozinho já ocupa 4 GB. .. _fig_disk: .. figure:: ../img/disk.png :width: 700px Modifique o tamanho do disco rígido da instância. Por fim, vá para “7. Review” e clique em “Launch” para iniciar o configurado instância. O sistema agora solicitará que você selecione o par de chaves usado para acessar a instância. Se você não tiver um par de chaves, selecione “Criar um novo par de chaves” em o primeiro menu suspenso em :numref:`fig_keypair` para gerar um par de chaves. Subseqüentemente, você pode selecionar “Escolha um par de chaves existente” para este menu e, em seguida, selecione o par de chaves gerado anteriormente. Clique em “Iniciar Instâncias” para iniciar o instância. .. _fig_keypair: .. figure:: ../img/keypair.png :width: 500px Selecione um par de chaves. Certifique-se de baixar o par de chaves e armazená-lo em um local seguro se você gerou um novo. Esta é a sua única maneira de entrar no servidor por SSH. Clique no ID da instância mostrado em :numref:`fig_launching` para ver o status desta instância. .. _fig_launching: .. figure:: ../img/launching.png :width: 700px Clique no ID da instância. Conectando-se à instância ~~~~~~~~~~~~~~~~~~~~~~~~~ Conforme mostrado em :numref:`fig_connect`, após o estado da instância ficar verde, clique com o botão direito na instância e selecione ``Connect`` para visualizar o método de acesso da instância. .. _fig_connect: .. figure:: ../img/connect.png :width: 700px Visualize o acesso à instância e o método de inicialização. Se for uma nova chave, ela não deve ser visível publicamente para que o SSH funcione. Vá para a pasta onde você armazena ``D2L_key.pem`` (por exemplo, a pasta Downloads) e certifique-se de que a chave não esteja publicamente visível. .. code:: bash cd /Downloads ## if D2L_key.pem is stored in Downloads folder chmod 400 D2L_key.pem .. _fig_chmod: .. figure:: ../img/chmod.png :width: 400px Visualize o acesso à instância e o método de inicialização. Agora, copie o comando ssh na caixa vermelha inferior de :numref:`fig_chmod` e cole na linha de comando: .. code:: bash ssh -i "D2L_key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com Quando a linha de comando perguntar “Tem certeza de que deseja continuar conectando (sim/não)”, digite “sim” e pressione Enter para fazer login na instância. Seu servidor está pronto agora. Instalando CUDA --------------- Antes de instalar o CUDA, certifique-se de atualizar a instância com os drivers mais recentes. .. code:: bash sudo apt-get update && sudo apt-get install -y build-essential git libgfortran3 Aqui, baixamos o CUDA 10.1. Visite o `repositório oficial da NVIDIA `__ para encontrar o link de download do CUDA 10.1 conforme mostrado em :numref:`fig_cuda`. .. _fig_cuda: .. figure:: ../img/cuda101.png :width: 500px Encontre o endereço de download do CUDA 10.1. Copie as instruções e cole-as no terminal para instalar CUDA 10.1. .. code:: bash ## Paste the copied link from CUDA website wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb sudo apt-key add /var/cuda-repo-10-1-local-10.1.243-418.87.00/7fa2af80.pub sudo apt-get update sudo apt-get -y install cuda Depois de instalar o programa, execute o seguinte comando para visualizar as GPUs. .. code:: bash nvidia-smi Finalmente, adicione CUDA ao caminho da biblioteca para ajudar outras bibliotecas a encontrá-lo. .. code:: bash echo "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:/usr/local/cuda/lib64" >> ~/.bashrc Instalação do MXNet e download dos notebooks D2L ------------------------------------------------ Primeiro, para simplificar a instalação, você precisa instalar o `Miniconda `__ para Linux. O link de download e o nome do arquivo estão sujeitos a alterações, então vá ao site do Miniconda e clique em “Copiar endereço do link” conforme mostrado em :numref:`fig_miniconda`. .. _fig_miniconda: .. figure:: ../img/miniconda.png :width: 700px Download Miniconda. .. code:: bash # The link and file name are subject to changes wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh sh Miniconda3-latest-Linux-x86_64.sh -b Após a instalação do Miniconda, execute o seguinte comando para ativar CUDA e conda. .. code:: bash ~/miniconda3/bin/conda init source ~/.bashrc Em seguida, baixe o código deste livro. .. code:: bash sudo apt-get install unzip mkdir d2l-en && cd d2l-en curl https://d2l.ai/d2l-en.zip -o d2l-en.zip unzip d2l-en.zip && rm d2l-en.zip Em seguida, crie o ambiente conda ``d2l`` e digite ``y`` para prosseguir com a instalação. .. code:: bash conda create --name d2l -y Após criar o ambiente ``d2l``, ative-o e instale o ``pip``. .. code:: bash conda activate d2l conda install python=3.7 pip -y Finalmente, instale o MXNet e o pacote ``d2l``. O postfix ``cu101`` significa que esta é a variante CUDA 10.1. Para versões diferentes, digamos apenas CUDA 10.0, você deve escolher ``cu100``. .. code:: bash pip install mxnet-cu101==1.7.0 pip install git+https://github.com/d2l-ai/d2l-en Você pode testar rapidamente se tudo correu bem da seguinte maneira: :: $ python >>> from mxnet import np, npx >>> np.zeros((1024, 1024), ctx=npx.gpu()) Executando Jupyter ------------------ Para executar o Jupyter remotamente, você precisa usar o encaminhamento de porta SSH. Afinal, o servidor na nuvem não possui monitor ou teclado. Para isso, faça login em seu servidor a partir de seu desktop (ou laptop) da seguinte maneira. :: # This command must be run in the local command line ssh -i "/path/to/key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com -L 8889:localhost:8888 conda activate d2l jupyter notebook :numref:`fig_jupyter` mostra a saída possível depois de executar o Jupyter Notebook. A última linha é o URL da porta 8888. .. _fig_jupyter: .. figure:: ../img/jupyter.png :width: 700px Saída após executar o Jupyter Notebook. A última linha é o URL da porta 8888. Como você usou o encaminhamento de porta para a porta 8889, você precisará substituir o número da porta e usar o segredo fornecido pelo Jupyter ao abrir a URL em seu navegador local. Fechando instâncias não utilizadas ---------------------------------- Como os serviços em nuvem são cobrados pelo tempo de uso, você deve fechar as instâncias que não estão sendo usadas. Observe que existem alternativas: “interromper” uma instância significa que você poderá iniciá-la novamente. Isso é semelhante a desligar o servidor normal. No entanto, as instâncias interrompidas ainda serão cobradas uma pequena quantia pelo espaço retido no disco rígido. “Terminar” exclui todos os dados associados a ele. Isso inclui o disco, portanto, você não pode iniciá-lo novamente. Faça isso apenas se souber que não precisará dele no futuro. Se você quiser usar a instância como um modelo para muitas outras instâncias, clique com o botão direito no exemplo em :numref:`fig_connect` e selecione “Image” :math:`\rightarrow` “Criar” para criar uma imagem da instância. Assim que terminar, selecione “Instance State” :math:`\rightarrow` “Terminate” para encerrar a instância. Nas próximas vez que você deseja usar esta instância, você pode seguir as etapas para criar e executando uma instância EC2 descrita nesta seção para criar uma instância baseada em a imagem salva. A única diferença é que, em “1. Escolha AMI” mostrado em :numref:`fig_ubuntu`, você deve usar a opção “My AMIs”à esquerda para selecionar seus salvos imagem. A instância criada irá reter as informações armazenadas na imagem de forma rígida disco. Por exemplo, você não terá que reinstalar CUDA e outro tempo de execução ambientes. Sumário ------- - Você pode iniciar e interromper instâncias sob demanda, sem ter que comprar e construir seu próprio computador. - Você precisa instalar drivers de GPU adequados antes de usá-los. Exercícios ---------- 1. A nuvem oferece conveniência, mas não é barata. Descubra como lançar `instâncias pontuais `__ para ver como reduzir preços. 2. Experimente diferentes servidores GPU. Eles são rápidos? 3. Faça experiências com servidores multi-GPU. Quão bem você pode escalar as coisas? `Discussão `__