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 ONNX oferece 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 do ONNX .

  • Desempenho aprimorado : o tempo de execução do ONNX otimiza 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 ONNX oferece 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 :

  1. PyTorch
  2. TensorFlow
  3. CatBoost
  4. LightGBM
  5. XGBoost
  6. Scikit-learn

Conversão dos modelos PyTorch para o formato ONNX

Siga este processo para converter seu modelo treinado em PyTorch para o formato ONNX :

  1. Importar bibliotecas : Comece importando as bibliotecas essenciais, como onnxruntime para executar o modelo, torch para as funcionalidades PyTorch e outras bibliotecas necessárias para o seu aplicativo.

  2. Crie ou faça download do modelo PyTorch : Você pode criar um modelo PyTorch usando seu próprio conjunto de dados ou usar modelos fornecidos por repositórios externos de modelos de código aberto, como Hugging Face.

  3. Converta o modelo PyTorch para o formato ONNX : Para converter o modelo PyTorch para o formato ONNX:

    a. Prepare o modelo : Certifique-se de que seu modelo PyTorch esteja no modo de avaliação usando a função model.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.export para converter o modelo para o formato ONNX.

  4. 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:

  1. Importe as bibliotecas : Comece importando as bibliotecas essenciais, como tf2onnx , para facilitar a conversão de modelos TensorFlow para ONNX, e outras bibliotecas necessárias para seu aplicativo.

  2. Faça download do modelo TensorFlow : Você deve fazer o download do modelo TensorFlow criado externamente e dos dados usados para treinar o modelo.

  3. Converta o modelo TensorFlow para o formato ONNX : Use o comando tf2onnx.convert para converter seu modelo TensorFlow , criado no formato SavedModel , para o formato ONNX . Se você quiser converter um modelo TensorFlow Lite , use o sinalizador --tflite em vez do sinalizador --saved-model .

Nota:

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.

  1. 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:

  1. Importe as bibliotecas : Comece importando as bibliotecas essenciais, como onnxruntime para executar o modelo, catboost para as funcionalidades de CatBoost e outras bibliotecas necessárias para seu aplicativo.

  2. Crie ou faça download do modelo CatBoost : Você pode criar um modelo CatBoost usando seu próprio conjunto de dados ou usar modelos fornecidos por repositórios externos de modelos de código aberto, como Hugging Face.

  3. Converta o modelo CatBoost para o formato ONNX : Para converter o modelo CatBoost para o formato ONNX :

    a. Carregue o modelo CatBoost : Você pode carregar o modelo CatBoost usando bibliotecas como pickle:

    catboost_model = pickle.load(file)
    

    b. Exporte o modelo : Use a função catboost_model.save_model com o parâmetro de formato definido como onnx para converter o modelo no formato ONNX .

    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'
        }
    )
    
  4. 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 :

  1. Importe as bibliotecas : Comece importando as bibliotecas essenciais, como onnxruntime para executar o modelo, lightgbm para as funcionalidades de LightGBM e onnxmltools para conversão e outras bibliotecas necessárias para seu aplicativo.

  2. Crie ou faça download do modelo LightGBM : Você pode criar um modelo LightGBM usando seu próprio conjunto de dados ou usar modelos fornecidos por repositórios externos de modelos de código aberto, como Hugging Face.

  3. Converta o modelo LightGBM para o formato ONNX : Para converter o modelo LightGBM para o formato ONNX :

    a. Carregue o modelo LightGBM : Você pode carregar o modelo LightGBM usando bibliotecas como pickle:

    lgbm_model = pickle.load(file)
    

    b. Exporte o modelo : Use a função convert_lightgbm para converter o modelo para o formato ONNX .

    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 LightGBM para o formato ONNX , consulte Solução de problemas do tempo de execução do watsonx.ai.

  4. 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 :

  1. Importe as bibliotecas : Comece importando as bibliotecas essenciais, como onnxruntime para executar o modelo, xgboost para as funcionalidades de XGBoost e outras bibliotecas necessárias para seu aplicativo.

  2. Crie ou faça download do modelo XGBoost : Você pode criar um modelo XGBoost usando seu próprio conjunto de dados ou usar modelos fornecidos por repositórios externos de modelos de código aberto, como Hugging Face.

  3. Converta o modelo XGBoost para o formato ONNX : Para converter o modelo XGBoost para o formato ONNX:

    a. Carregue o modelo XGboost : Você pode carregar o modelo XGBoost usando bibliotecas como pickle:

    xgboost_model = pickle.load(file)
    

    b. Exporte o modelo : Use a função convert_xgboost para converter o modelo para o formato ONNX .

    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)
    
  4. 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 :

  1. Importe as bibliotecas : Comece importando as bibliotecas essenciais, como onnxruntime para executar o modelo, sklearn para as funcionalidades de scikit-learn , skl2onnx para conversão e outras bibliotecas necessárias para seu aplicativo.

  2. Crie ou faça download do modelo scikit-learn : Você pode criar um modelo scikit-learn usando seu próprio conjunto de dados ou usar modelos fornecidos por repositórios externos de modelos de código aberto, como Hugging Face.

  3. Converta o modelo scikit-learn para o formato ONNX : Para converter o modelo scikit-learn para o formato ONNX :

    a. Carregue o modelo scikit-learn : Você pode carregar o modelo scikit-learn usando bibliotecas como pickle:

    sklearn_model = pickle.load(file)
    

    b. Exporte o modelo : Use a função to_onnx para converter o modelo para o formato ONNX .

    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())
    
  4. 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 PyTorch ou TensorFlow.

  • Versão do Opset : A versão do conjunto de operações em ONNX determina 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 ONNX suportam 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 do ONNX pode causar erros durante a inferência. É preciso garantir que a versão do conjunto de operações ONNX escolhida 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:

  1. Em seu espaço de implementação, vá para a guia Assets (Ativos ).

  2. Localize seu modelo na lista de ativos, clique no ícone Menu, clique no ícone Menu e selecione Deploy.

  3. Selecione o tipo de implantação para seu modelo. Escolha entre as opções de implementação on-line e em lote.

  4. 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.

  5. Selecione uma especificação de hardware para seu modelo.

  6. Selecione uma configuração e uma especificação de software para seu modelo.

  7. Clique em Criar.

Testando o Modelo

Siga estas etapas para testar seus modelos implantados convertidos para o formato ONNX:

  1. Em seu espaço de implantação, abra a guia Implantações e clique no nome da implantação.
  2. Clique na guia Teste para inserir o texto do prompt e obter uma resposta do ativo implantado.
  3. 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.
  4. 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 :

Blocos de notas de
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