Criação de uma imagem personalizada e uso dela para criar uma aplicação de IA
Se você quiser usar um mecanismo de IA não suportado pelo ModelArts crie uma imagem personalizada para o mecanismo, importe a imagem para ModelArts e use a imagem para criar aplicações de IA. Esta seção descreve como usar uma imagem personalizada para criar uma aplicação de IA e implementar a aplicação como um serviço em tempo real.
O processo é o seguinte:
- Construir uma imagem localmente: crie um pacote de imagem personalizado localmente. Para obter detalhes, consulte Especificações de imagens personalizadas para a criação de uma aplicação de IA.
- Verificar a imagem localmente e carregá-la para o SWR: verifique as APIs da imagem personalizada e carregue a imagem personalizada para o SWR.
- Usar a imagem personalizada para criar uma aplicação de IA: importe a imagem para o gerenciamento de aplicações de IA da ModelArts.
- Implementar a aplicação de IA como um serviço em tempo real: implemente o modelo como um serviço em tempo real.
Construir uma imagem localmente
Esta seção usa um host de Linux x86_x64 como exemplo. Você pode comprar um ECS com as mesmas especificações ou usar um host local existente para criar uma imagem personalizada.
- Após fazer logon no host, instale o Docker. Para obter detalhes, consulte documentos oficiais do Docker. Como alternativa, execute os seguintes comandos para instalar o Docker:
curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh
- Obtenha a imagem de base. Ubuntu 18.04 é usado neste exemplo.
docker pull ubuntu:18.04
- Crie a pasta self-define-images e edite Dockerfile e test_app.py na pasta da imagem personalizada. No código de exemplo, o código da aplicação é executado na estrutura do Flask.
A estrutura do arquivo é a seguinte:
self-define-images/ --Dockerfile --test_app.py
- Dockerfile
From ubuntu:18.04 # Configure the HUAWEI CLOUD source and install Python, Python3-PIP, and Flask. RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \ sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list && \ sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list && \ apt-get update && \ apt-get install -y python3 python3-pip && \ pip3 install --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple Flask # Copy the application code to the image. COPY test_app.py /opt/test_app.py # Specify the boot command of the image. CMD python3 /opt/test_app.py
- test_app.py
from flask import Flask, request import json app = Flask(__name__) @app.route('/greet', methods=['POST']) def say_hello_func(): print("----------- in hello func ----------") data = json.loads(request.get_data(as_text=True)) print(data) username = data['name'] rsp_msg = 'Hello, {}!'.format(username) return json.dumps({"response":rsp_msg}, indent=4) @app.route('/goodbye', methods=['GET']) def say_goodbye_func(): print("----------- in goodbye func ----------") return '\nGoodbye!\n' @app.route('/', methods=['POST']) def default_func(): print("----------- in default func ----------") data = json.loads(request.get_data(as_text=True)) return '\n called default func !\n {} \n'.format(str(data)) # host must be "0.0.0.0", port must be 8080 if __name__ == '__main__': app.run(host="0.0.0.0", port=8080)
- Dockerfile
- Alterne para a pasta self-define-images e execute o seguinte comando para criar uma imagem personalizada test:v1:
docker build -t test:v1 .
- Execute docker images para exibir a imagem personalizada que você criou.
Verificar a imagem localmente e carregá-la para o SWR
- Execute o seguinte comando no ambiente local para iniciar a imagem personalizada:
docker run -it -p 8080:8080 test:v1
Figura 2 Iniciar uma imagem personalizada
- Abra outro terminal e execute os seguintes comandos para testar as funções das três APIs da imagem personalizada:
curl -X POST -H "Content-Type: application/json" --data '{"name":"Tom"}' 127.0.0.1:8080/ curl -X POST -H "Content-Type: application/json" --data '{"name":"Tom"}' 127.0.0.1:8080/greet curl -X GET 127.0.0.1:8080/goodbye
Se forem exibidas informações semelhantes às seguintes, a verificação da função é bem-sucedida.
Figura 3 Testar funções da API
- Carregue a imagem personalizada para o SWR. Para obter detalhes, consulte Como carregar imagens para o SWR?
- Veja a imagem carregada na página My Images > Private Images do console do SWR.
Usar a imagem personalizada para criar uma aplicação de IA
- Meta Model Source: selecione Container image.
- Container Image Path: selecione a imagem privada criada.
Figura 4 Imagem privada criada
- Container API: protocolo e número de porta para iniciar um modelo. Certifique-se de que o protocolo e o número da porta sejam os mesmos fornecidos na imagem personalizada.
- Image Replication: indica se a imagem do modelo deve ser copiada para ModelArts na imagem do contêiner. Este parâmetro é opcional.
- Health Check: verifica o estado de saúde de um modelo. Este parâmetro é opcional. Esse parâmetro é configurável somente quando a API de verificação de integridade é configurada na imagem personalizada. Caso contrário, a criação da aplicação de IA falhará.
- Container Image Path: selecione a imagem privada criada.
- APIs: APIs de uma imagem personalizada. Este parâmetro é opcional. As APIs do modelo devem estar em conformidade com as especificações do ModelArts. Para obter detalhes, consulte Especificações para editar um arquivo de configuração de modelo.
O arquivo de configuração é o seguinte:
[{ "url": "/", "method": "post", "request": { "Content-type": "application/json" }, "response": { "Content-type": "application/json" } }, { "url": "/greet", "method": "post", "request": { "Content-type": "application/json" }, "response": { "Content-type": "application/json" } }, { "url": "/goodbye", "method": "get", "request": { "Content-type": "application/json" }, "response": { "Content-type": "application/json" } } ]
Implementar a aplicação de IA como um serviço em tempo real
- Implemente a aplicação de IA como um serviço em tempo real. Para obter detalhes, consulte Implementação como serviço em tempo real.
- Veja os detalhes sobre o serviço em tempo real.
- Acesse o serviço em tempo real na página de guia Prediction.
Figura 5 Acessar um serviço em tempo real