Implementação de modelos convertidos para o formato ONNX
Você pode implantar e inferir modelos de aprendizado de máquina em PyTorch ou TensorFlow que são salvos em formatos diferentes e convertidos para o formato Open Neural Network Exchange (ONNX). ONNX é um formato de código aberto para representar modelos de aprendizagem profunda. Os desenvolvedores podem usar o formato ONNX para treinar seus modelos em uma estrutura, como PyTorch ou TensorFlow, e depois exportá-lo para execução em outro ambiente com características de desempenho diferentes. O formato ONNX oferece uma solução avançada para converter um modelo de aprendizado de máquina em ONNX e realizar inferências usando o tempo de execução ONNX .
Benefícios da conversão de modelos para o tempo de execução do ONNX
A conversão de um modelo para o tempo de execução do ONNX oferece vários benefícios, especialmente no contexto de aplicativos de aprendizado de máquina e aprendizado profundo. Algumas das vantagens da conversão de modelos para o tempo de execução do ONNX são as seguintes:
Compatibilidade entre plataformas : o site
ONNXoferece um formato padrão para representar modelos de aprendizado de máquina, o que facilita a implantação de modelos em diferentes estruturas, como PyTorch ou Tensorflow. Você pode treinar modelos em uma estrutura e implantá-los em outra estrutura que ofereça suporte ao tempo de execução doONNX.Desempenho aprimorado : o tempo de execução do
ONNXotimiza os modelos para inferência aplicando várias otimizações específicas de hardware e software, como otimizações de gráficos. Além disso, ele suporta a execução em diversos hardwares, como CPUs e GPUs, garantindo a utilização eficiente dos recursos.Interoperabilidade : o
ONNXoferece uma maneira de treinar modelos, como o PyTorch, TensorFlow, e o scikit-learn em uma estrutura e, em seguida, exportá-los para execução em outro ambiente, o que simplifica os fluxos de trabalho. Ele rompe as barreiras entre diferentes estruturas de aprendizagem profunda, permitindo que os desenvolvedores aproveitem os pontos fortes de diferentes bibliotecas sem ficarem presos a um único ecossistema.
Estruturas compatíveis para conversão
Você pode converter modelos de aprendizado de máquina que usam as seguintes estruturas para o formato ONNX :
PyTorchTensorFlowCatBoostLightGBMXGBoostScikit-learn
Conversão dos modelos PyTorch para o formato ONNX
Siga este processo para converter seu modelo treinado em PyTorch para o formato ONNX :
Importar bibliotecas : Comece importando as bibliotecas essenciais, como
onnxruntimepara executar o modelo,torchpara as funcionalidades PyTorch e outras bibliotecas necessárias para o seu aplicativo.Crie ou faça download do modelo
PyTorch: Você pode criar um modeloPyTorchusando seu próprio conjunto de dados ou usar modelos fornecidos por repositórios externos de modelos de código aberto, como Hugging Face.Converta o modelo
PyTorchpara o formato ONNX : Para converter o modeloPyTorchpara o formato ONNX:a. Prepare o modelo : Certifique-se de que seu modelo
PyTorchesteja no modo de avaliação usando a funçãomodel.eval(). Talvez você precise de um tensor de entrada fictício para corresponder à forma do modelo.b. Exporte o modelo : Use a função
torch.onnx.exportpara converter o modelo para o formato ONNX.Verifique a conversão : Depois de converter o modelo, verifique se ele está funcionando conforme o esperado usando a biblioteca
onnx.
Conversão dos modelos TensorFlow para o formato ONNX
Siga este processo para converter seu modelo TensorFlow para o formato ONNX:
Importe as bibliotecas : Comece importando as bibliotecas essenciais, como
tf2onnx, para facilitar a conversão de modelosTensorFlowpara ONNX, e outras bibliotecas necessárias para seu aplicativo.Faça download do modelo
TensorFlow: Você deve fazer o download do modeloTensorFlowcriado externamente e dos dados usados para treinar o modelo.Converta o modelo
TensorFlowpara o formato ONNX : Use o comandotf2onnx.convertpara converter seu modeloTensorFlow, criado no formatoSavedModel, para o formatoONNX. Se você quiser converter um modeloTensorFlow Lite, use o sinalizador--tfliteem vez do sinalizador--saved-model.
Keras os modelos e as funções tf podem ser convertidos diretamente no Python usando as funções tf2onnx.convert.from_keras ou tf2onnx.convert.from_function.
- Verifique a conversão : Depois de converter o modelo, verifique se ele está funcionando conforme o esperado usando a biblioteca
onnx.
Conversão de modelos CatBoost para o formato ONNX
Siga este processo para converter seu modelo treinado em CatBoost para o formato ONNX:
Importe as bibliotecas : Comece importando as bibliotecas essenciais, como
onnxruntimepara executar o modelo,catboostpara as funcionalidades deCatBooste outras bibliotecas necessárias para seu aplicativo.Crie ou faça download do modelo
CatBoost: Você pode criar um modeloCatBoostusando seu próprio conjunto de dados ou usar modelos fornecidos por repositórios externos de modelos de código aberto, como Hugging Face.Converta o modelo
CatBoostpara o formatoONNX: Para converter o modeloCatBoostpara o formatoONNX:a. Carregue o modelo
CatBoost: Você pode carregar o modeloCatBoostusando bibliotecas comopickle:catboost_model = pickle.load(file)b. Exporte o modelo : Use a função
catboost_model.save_modelcom o parâmetro de formato definido comoonnxpara converter o modelo no formatoONNX.catboost_model.save_model( onnx_model_name, format="onnx", export_parameters={ 'onnx_domain': 'ai.catboost', 'onnx_model_version': 1, 'onnx_doc_string': 'test model for Regressor', 'onnx_graph_name': 'CatBoostModel_for_Regression' } )Verifique a conversão : Depois de converter o modelo, verifique se ele está funcionando conforme o esperado usando a biblioteca
onnx.
Conversão de modelos LightGBM para o formato ONNX
Siga este processo para converter seu modelo treinado em LightGBM para o formato ONNX :
Importe as bibliotecas : Comece importando as bibliotecas essenciais, como
onnxruntimepara executar o modelo,lightgbmpara as funcionalidades deLightGBMeonnxmltoolspara conversão e outras bibliotecas necessárias para seu aplicativo.Crie ou faça download do modelo
LightGBM: Você pode criar um modeloLightGBMusando seu próprio conjunto de dados ou usar modelos fornecidos por repositórios externos de modelos de código aberto, como Hugging Face.Converta o modelo
LightGBMpara o formatoONNX: Para converter o modeloLightGBMpara o formatoONNX:a. Carregue o modelo
LightGBM: Você pode carregar o modeloLightGBMusando bibliotecas comopickle:lgbm_model = pickle.load(file)b. Exporte o modelo : Use a função
convert_lightgbmpara converter o modelo para o formatoONNX.from onnxmltools import convert_lightgbm from skl2onnx.common.data_types import FloatTensorType from onnxmltools.utils import save_model initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))] onnx_model = convert_lightgbm(model=lgbm_model, initial_types=initial_types) onnx_model_filename = "lgbm_model.onnx" save_model(onnx_model, onnx_model_filename)Dica:Para solucionar problemas de conversão de modelos
LightGBMpara o formatoONNX, consulte Solução de problemas do tempo de execução do watsonx.ai.Verifique a conversão : Depois de converter o modelo, verifique se ele está funcionando conforme o esperado usando a biblioteca
onnx.
Conversão dos modelos XGBoost para o formato ONNX
Siga este processo para converter seu modelo treinado em XGBoost para o formato ONNX :
Importe as bibliotecas : Comece importando as bibliotecas essenciais, como
onnxruntimepara executar o modelo,xgboostpara as funcionalidades deXGBooste outras bibliotecas necessárias para seu aplicativo.Crie ou faça download do modelo
XGBoost: Você pode criar um modeloXGBoostusando seu próprio conjunto de dados ou usar modelos fornecidos por repositórios externos de modelos de código aberto, como Hugging Face.Converta o modelo
XGBoostpara o formato ONNX : Para converter o modeloXGBoostpara o formato ONNX:a. Carregue o modelo
XGboost: Você pode carregar o modeloXGBoostusando bibliotecas comopickle:xgboost_model = pickle.load(file)b. Exporte o modelo : Use a função
convert_xgboostpara converter o modelo para o formatoONNX.from onnxmltools import convert_xgboost from onnxconverter_common.data_types import FloatTensorType from onnxmltools.utils import save_model initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))] onnx_model = convert_xgboost(xgboost_model, initial_types=initial_types) onnx_model_filename = "xgboost_onnx_model.onnx" save_model(onnx_model, onnx_model_filename)Verifique a conversão : Depois de converter o modelo, verifique se ele está funcionando conforme o esperado usando a biblioteca onnx.
Conversão dos modelos scikit-learn para o formato ONNX
Siga este processo para converter seu modelo treinado em scikit-learn para o formato ONNX :
Importe as bibliotecas : Comece importando as bibliotecas essenciais, como
onnxruntimepara executar o modelo,sklearnpara as funcionalidades descikit-learn,skl2onnxpara conversão e outras bibliotecas necessárias para seu aplicativo.Crie ou faça download do modelo
scikit-learn: Você pode criar um modeloscikit-learnusando seu próprio conjunto de dados ou usar modelos fornecidos por repositórios externos de modelos de código aberto, como Hugging Face.Converta o modelo
scikit-learnpara o formato ONNX : Para converter o modeloscikit-learnpara o formatoONNX:a. Carregue o modelo
scikit-learn: Você pode carregar o modeloscikit-learnusando bibliotecas comopickle:sklearn_model = pickle.load(file)b. Exporte o modelo : Use a função
to_onnxpara converter o modelo para o formatoONNX.from skl2onnx import to_onnx onnx_model = to_onnx(sklearn_model, X, target_opset=19) with open("sklearn_model.onnx", "wb") as f: f.write(onnx_model.SerializeToString())Verifique a conversão : Depois de converter o modelo, verifique se ele está funcionando conforme o esperado usando a biblioteca
onnx.
Considerações adicionais
Aqui estão algumas considerações adicionais sobre a conversão de seus modelos para o formato ONNX :
Eixos dinâmicos : Os eixos dinâmicos podem ser usados por um modelo para lidar com formas de entrada variáveis, como tamanhos de lote dinâmicos ou comprimentos de sequência, o que é útil para modelos implantados em aplicativos em que as dimensões de entrada podem variar. Use eixos dinâmicos se o seu modelo lidar com tamanhos de entrada variáveis, como tamanho de lote dinâmico ou comprimento de sequência.
Os eixos dinâmicos também reduzem a sobrecarga de memória, pois podem ser usados com várias entradas e saídas para se adaptarem dinamicamente sem reexportar o modelo. Você pode especificar os eixos dinâmicos durante a exportação do modelo em
PyTorchouTensorFlow.Versão do Opset : A versão do conjunto de operações em
ONNXdetermina o conjunto de operações e suas especificações que são compatíveis com o modelo. É um fator crítico durante a conversão e a implementação do modelo.Diferentes estruturas e tempos de execução do
ONNXsuportam versões específicas de opset. As versões mais antigas do opset podem não ter recursos ou otimizações presentes nas versões mais recentes. A incompatibilidade entre a versão opset de um modelo e o tempo de execução doONNXpode causar erros durante a inferência. É preciso garantir que a versão do conjunto de operaçõesONNXescolhida seja compatível com o tempo de execução de destino.
Implementação de modelos convertidos para o formato ONNX
Use a especificação de software onnxruntime_opset_19 para implantar seu modelo de aprendizado de máquina convertido para o formato ONNX . Você deve especificar a especificação do software e o tipo de modelo ao armazenar o modelo no repositório watsonx.ai Runtime. Para obter mais informações, consulte Especificações de software compatíveis.
Para implementar modelos convertidos para o formato ONNX a partir da interface do usuário, siga estas etapas:
Em seu espaço de implementação, vá para a guia Assets (Ativos ).
Localize seu modelo na lista de ativos, clique no ícone Menu, clique no ícone Menu e selecione Deploy.
Selecione o tipo de implantação para seu modelo. Escolha entre as opções de implementação on-line e em lote.
Insira um nome para sua implantação e, opcionalmente, insira um nome de serviço, uma descrição e tags.
Nota:- Use o campo Nome da implantação para especificar um nome para a implantação em vez do ID da implantação.
- O nome de serviço deve ser exclusivo dentro do namespace.
- O nome do serviço deve conter apenas estes caracteres: a-z,0-9,_] e deve ter no máximo 36 caracteres.
- Nos fluxos de trabalho em que o modelo de base personalizado é usado periodicamente, considere a possibilidade de atribuir ao modelo o mesmo nome de serviço sempre que ele for implantado. Dessa forma, depois de excluir e reimplantar o modelo, você poderá continuar usando o mesmo endpoint em seu código.
Selecione uma especificação de hardware para seu modelo.
Selecione uma configuração e uma especificação de software para seu modelo.
Clique em Criar.
Testando o Modelo
Siga estas etapas para testar seus modelos implantados convertidos para o formato ONNX:
- Em seu espaço de implantação, abra a guia Implantações e clique no nome da implantação.
- Clique na guia Teste para inserir o texto do prompt e obter uma resposta do ativo implantado.
- Insira os dados de teste em um dos seguintes formatos, dependendo do tipo de ativo que você implantou:
- Texto : Insira dados de entrada de texto para gerar um bloco de texto como saída.
- JSON : insira dados de entrada JSON para gerar saída no formato JSON.
- Clique em Generate (Gerar ) para obter resultados baseados em seu prompt.
Blocos de notas de
Os notebooks de amostra a seguir demonstram como implantar modelos de aprendizado de máquina convertidos de PyTorch ou TensorFlow para o formato ONNX usando a biblioteca cliente Python :
| Bloco de notas | Estrutura | Descrição |
|---|---|---|
| Converta a rede neural ONNX de eixos fixos para eixos dinâmicos e use-a com o watsonx | ONNX | Configure o ambiente Crie e exporte o modelo ONNX básico Converta o modelo de eixos fixos para eixos dinâmicos Persista no modelo ONNX convertido Implante e pontue o modelo ONNX Limpe Resumo e próximas etapas |
| Use o modelo ONNX convertido do PyTorch com o watsonx | PyTorch, ONNX | Criar modelo PyTorch com conjunto de dados. Converta o modelo PyTorch para o formato ONNX Persista o modelo convertido no repositório Watson Machine Learning. Implantar modelo para pontuação on-line usando a biblioteca do cliente. Pontue registros de amostra usando a biblioteca do cliente. |
| Use o modelo ONNX convertido do TensorFlow para reconhecer dígitos escritos à mão com o watsonx | Tensorflow, ONNX | Faça o download de um modelo TensorFlow treinado externamente com conjunto de dados. Converta o modelo TensorFlow para o formato ONNX Persista o modelo convertido no repositório Watson Machine Learning. Implantar modelo para pontuação on-line usando a biblioteca do cliente. Pontue registros de amostra usando a biblioteca do cliente. |
| Use o modelo ONNX convertido de CatBoost | CatBoost, ONNX | Modelo CatBoost treinado. Converta o modelo CatBoost para o formato ONNX. Persistir o modelo convertido no repositório Watson Machine Learning. Implantar modelo para pontuação on-line usando a biblioteca do cliente. Pontue registros de amostra usando a biblioteca do cliente. |
| Use o modelo ONNX convertido de LightGBM | LightGBM, ONNX | Treine um modelo LightGBM Converta o modelo LightGBM para o formato ONNX Persista o modelo convertido no repositório watsonx.ai Runtime Implemente o modelo para pontuação on-line usando a biblioteca do cliente Pontue registros de amostra usando a biblioteca do cliente |
| Use o modelo ONNX convertido do XGBoost com ibm- watsonx -ai | XGBoost, ONNX | Treinar um modelo XGBoost. Converta o modelo XGBoost para o formato ONNX. Mantenha o modelo convertido no repositório watsonx.ai. Implemente o modelo para pontuação on-line usando a instância do APIClient. Marque registros de amostra usando a instância do APIClient. |
| Use o modelo ONNX convertido do scikit-learn com o ibm- watsonx -ai | Scikit-learn, ONNX | Treine um modelo do scikit-learn Converta o modelo nativo do scikit-learn para o formato ONNX Realize a conversão para um modelo personalizado do scikit-learn em um pipeline do sklearn Persista o modelo convertido no repositório de tempo de execução watsonx.ai Implemente o modelo para pontuação on-line usando a biblioteca do cliente Pontue registros de amostra usando a biblioteca do cliente |