Containerize o ambiente de software necessário para seus jobs de treinamento de IA e execute-os no ECI. Essa abordagem simplifica a configuração do ambiente e permite pagar apenas pelo tempo de execução, reduzindo custos e aumentando a eficiência. Este tópico usa um job de treinamento do TensorFlow baseado em GPU do GitHub como exemplo para demonstrar como executar um job de treinamento em um cluster ACK Serverless usando o ECI.
Contexto
A inteligência artificial e o machine learning são amplamente utilizados hoje em dia, o que resulta em uma grande variedade de modelos de treinamento e no aumento de jobs de treinamento na nuvem. No entanto, após migrar para a nuvem, você pode enfrentar os seguintes desafios ao executar jobs de treinamento:
Você precisa adquirir uma instância de GPU e instalar um driver de GPU. Mesmo após containerizar o job de treinamento, ainda é preciso instalar um hook de runtime de GPU.
Para economizar custos, geralmente liberam-se os recursos após a conclusão de um job. Porém, na próxima vez que iniciar o job, será necessário recriar a instância e reconfigurar o ambiente. Se os nós de computação não tiverem recursos suficientes, você precisará fazer o scale out manualmente, além de recriar e reconfigurar tudo.
Para resolver esses problemas, recomendamos o uso de um cluster ACK Serverless e do ECI para executar seus jobs de treinamento. Essa solução oferece os seguintes benefícios:
Pagamento conforme o uso e sem necessidade de O&M.
Configure uma vez e reutilize indefinidamente.
O recurso de cache de imagem acelera a criação de instâncias para iniciar jobs de treinamento mais rapidamente.
Os dados são desacoplados do modelo de treinamento e podem ser armazenados de forma persistente.
Pré-requisitos
-
Prepare os dados de treinamento e a imagem de contêiner.
Dados de treinamento: este tópico utiliza um job de treinamento do TensorFlow do GitHub como exemplo. Para obter mais informações, consulte Job de treinamento do TensorFlow.
-
Imagem de contêiner: o ECI fornece uma imagem de exemplo enviada para o Alibaba Cloud Container Registry (ACR). Use a imagem diretamente ou personalize-a conforme suas necessidades.
Endereço interno: registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/tensorflow:1.0
Endereço público: registry.cn-hangzhou.aliyuncs.com/eci_open/tensorflow:1.0
-
Crie um cluster ACK Serverless.
Crie um cluster ACK Serverless no console do Container Service for Kubernetes. Para obter mais informações, consulte Criar um cluster ACK Serverless.
ImportanteSe precisar baixar imagens da internet ou se o seu job de treinamento exigir acesso à internet, configure um NAT Gateway.
Gerencie e acesse o cluster ACK Serverless com o kubectl das seguintes formas:
Para gerenciar o cluster a partir do seu computador local, instale e configure o cliente kubectl. Para obter mais informações, consulte Obter o arquivo kubeconfig de um cluster e usar o kubectl para conectar-se ao cluster.
Também é possível usar o kubectl no Cloud Shell para gerenciar o cluster. Para obter mais informações, consulte Usar o kubectl para gerenciar um cluster Kubernetes no Cloud Shell.
-
Crie um sistema de arquivos NAS e adicione um destino de montagem.
Crie um sistema de arquivos e adicione um destino de montagem no console do File Storage NAS. O sistema de arquivos deve estar na mesma VPC que o cluster ACK Serverless. Para obter mais informações, consulte Gerenciar sistemas de arquivos e Gerenciar destinos de montagem.
Etapas
Criar um cache de imagem
O recurso de cache de imagem está integrado aos clusters ACK Serverless como um CRD do Kubernetes para acelerar o download de imagens de contêiner.
-
Crie um arquivo YAML para o cache de imagem.
O código a seguir mostra um exemplo de arquivo imagecache.yaml:
NotaSe o seu cluster estiver na China (Hangzhou), use o endereço interno da imagem. Caso contrário, use o endereço público.
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: tensorflow spec: images: - registry.cn-hangzhou.aliyuncs.com/eci_open/tensorflow:1.0 -
Crie o cache de imagem.
kubectl create -f imagecache.yamlA criação de um cache de imagem envolve o download da imagem, o que pode levar algum tempo dependendo do tamanho dela e das condições da rede. Execute o comando a seguir para verificar o progresso da criação do cache de imagem:
kubectl get imagecache tensorflowO cache de imagem é criado quando uma saída semelhante à seguinte é retornada.
:~$ kubectl get imagecache tensorflow NAME AGE CACHEID PHASE PROGRESS tensorflow 13m imc-2zei4b7k43lxxxbvoz Ready 100%
Criar o job de treinamento
-
Crie um PV e um PVC para o sistema de arquivos NAS.
-
Prepare um arquivo YAML.
O código a seguir mostra um exemplo de arquivo nas.yaml:
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas labels: alicloud-pvname: pv-nas spec: capacity: storage: 100Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: pv-nas volumeAttributes: server: 15e1d4****-gt***.cn-beijing.nas.aliyuncs.com # The mount target of the NAS file system. path: / mountOptions: - nolock,tcp,noresvport - vers=3 --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi selector: matchLabels: alicloud-pvname: pv-nas -
Crie o PV e o PVC.
kubectl create -f nas.yaml
-
-
Crie um pod do ECI para executar o job de treinamento.
-
Prepare um arquivo YAML.
O código a seguir mostra um exemplo de arquivo tensorflow.yaml:
apiVersion: v1 kind: Pod metadata: name: tensorflow labels: app: tensorflow alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-use-specs: "ecs.gn6i-c4g1.xlarge" # Specify the GPU instance type. k8s.aliyun.com/eci-auto-imc: "true" # Enable automatic image cache matching. spec: restartPolicy: OnFailure containers: - name: tensorflow image: registry.cn-hangzhou.aliyuncs.com/eci_open/tensorflow:1.0 # Use the image address that corresponds to the image cache. command: - python args: - /home/classify_image/classify_image.py # The training script to run after the container starts. resources: limits: nvidia.com/gpu: "1" # The number of GPUs required by the container. volumeMounts: # Mount the NAS file system to persist training results. - name: pvc-nas mountPath: /tmp/classify_image_model volumes: - name: pvc-nas persistentVolumeClaim: claimName: pvc-nas -
Crie o pod.
kubectl create -f tensorflow.yaml
-
-
Verifique o status do job de treinamento.
kubectl get podQuando o status do pod mudar para 'Completed', o job de treinamento estará concluído.
kubectl get pod NAME READY STATUS RESTARTS AGE tensorflow 0/1 Completed 0 118sNotaTambém é possível visualizar os detalhes do pod executando
kubectl describe pod <pod name>ou consultar os logs executandokubectl logs <pod name>.
Visualizar resultados
Consulte os resultados do job de treinamento.
-
No console do File Storage NAS, confirme que os resultados do treinamento foram armazenados no sistema de arquivos NAS. Após remontar o sistema de arquivos, visualize os dados resultantes no caminho correspondente.
Na lista de sistemas de arquivos, a coluna Used Capacity exibe a capacidade de armazenamento utilizada, por exemplo, 45,71 MiB, e o status do sistema de arquivos aparece como Running.
-
No console do Elastic Container Instance, localize a instância do ECI correspondente ao pod.
O status 'Succeeded' indica que o contêiner na instância parou de ser executado. Em seguida, o sistema recupera os recursos de computação subjacentes e interrompe o faturamento do pod.
Tópicos relacionados
Este tópico utilizou o recurso de cache de imagem para acelerar o download de imagens e um sistema de arquivos NAS para armazenamento persistente. Para obter mais informações, consulte os seguintes tópicos: