Personalização de tempos de execução com bibliotecas e pacotes externos

É possível usar especificação de software customizada para referenciar qualquer biblioteca de terceiro, pacotes Python criados pelo usuário ou ambos. Bibliotecas de terceiros ou pacotes Python criados pelo usuário devem ser especificados como extensões de pacote para que possam ser referenciados em uma especificação de software personalizada.

Você pode personalizar os tempos de execução da implantação das seguintes maneiras:

Definindo personalizações em um projeto do Watson Studio e, em seguida, promovendo-as para um espaço de implantação

Os ambientes nos projetos Watson Studio podem ser personalizados para incluir bibliotecas de terceiros que podem ser instaladas a partir do Anaconda ou do repositório PyPI.

Para obter mais informações, consulte Ambientes.

Como parte da criação de um ambiente personalizado, estas etapas são realizadas internamente (visíveis para o usuário):

  • Uma extensão de pacote que contém os detalhes das bibliotecas de terceiros é criada em conda YAML format.
  • É criada uma especificação de software personalizado com o mesmo nome do ambiente personalizado e a extensão do pacote criada é associada a essa especificação de software personalizado.

Os modelos ou funções/scripts Python criados com o ambiente personalizado devem fazer referência à especificação do software personalizado quando forem salvos em um repositório Watson Machine Learning no escopo do projeto.

Propagação de especificações de software e extensões de pacotes de projetos para espaços de implantação

Para exportar especificações de software personalizadas e extensões de pacotes criadas em um projeto do Watson Studio para um espaço de implantação:

  1. Na interface do seu projeto, clique na guia Gerenciar.
  2. Selecione Ambientes.
  3. Clique na guia Modelos.
  4. No menu Opções do seu ambiente personalizado, selecione Promover para o espaço.

Selecionando "Promover para o espaço" para um ambiente personalizado em uma interfac Watson Studio

Alternativamente, quando você promove qualquer modelo ou função Python associada a um ambiente personalizado de um projeto Watson Studio para um espaço de implantação, a especificação de software personalizada e a extensão do pacote associadas também são promovidas para o espaço de implantação.

Se você deseja atualizar as especificações do software e as extensões do pacote após promovê-las para o espaço de implantação, siga estas etapas:

  1. No espaço de implantação, exclua as especificações de software, extensões de pacote e modelos associados (opcional) usando o cliente watsonx.ai Python.
  2. Em um projeto, promova o modelo, a função ou o script associado à especificação do software personalizado alterado e à extensão do pacote para o espaço.

As especificações do software também são incluídas quando você importa um projeto ou espaço que inclua um.

Criando extensões de pacotes e especificações de software personalizadas em um espaço de implantação usando o cliente Watson Machine Learning Python

É possível usar as APIs do Watson Machine Learning ou o cliente Python para definir uma especificação de software customizada que é derivada de uma especificação de base.

Etapas de alto nível para criar uma especificação de software personalizada que utilize bibliotecas de terceiros ou pacotes Python criados pelo usuário:

  1. Opcional: salve um conda arquivo YAML que contenha uma lista de bibliotecas de terceiros ou salve uma biblioteca Python criada pelo usuário e crie uma extensão de pacote.

    Observação: esta etapa não é necessária se o modelo não tiver nenhuma dependência de uma biblioteca de terceiros ou de uma biblioteca Python criada pelo usuário.
  2. Crie uma especificação de software customizada

  3. Adicione uma referência às extensões do pacote na especificação do software personalizado que você criou.

Salvar um conda arquivo YAML que contém uma lista de bibliotecas de terceiros

Para salvar um conda arquivo YAML que contém uma lista de bibliotecas de terceiros como uma extensão de pacote e criar uma especificação de software personalizada vinculada à extensão do pacote:

  1. Autentique e crie o cliente.

  2. Crie e configure o espaço de implementação padrão, em seguida, liste as especificações de software disponíveis.

     metadata = {
         wml_client.spaces.ConfigurationMetaNames.NAME:
             'examples-create-software-spec',
         wml_client.spaces.ConfigurationMetaNames.DESCRIPTION:
             'For my models'
     }
     space_details = wml_client.spaces.store(meta_props=metadata)
     space_uid = wml_client.spaces.get_id(space_details)
    
     # set the default space
     wml_client.set.default_space(space_uid)
    
     # see available meta names for software specs
     print('Available software specs configuration:', wml_client.software_specifications.ConfigurationMetaNames.get())
     wml_client.software_specifications.list()
    
     asset_id = 'undefined'
     pe_asset_id = 'undefined'
    
  3. Crie os metadados para extensões de pacote a serem incluídas na especificação de base.

    pe_metadata = {
        wml_client.package_extensions.ConfigurationMetaNames.NAME:
            'My custom library',
        # optional:
        # wml_client.software_specifications.ConfigurationMetaNames.DESCRIPTION:
        wml_client.package_extensions.ConfigurationMetaNames.TYPE:
            'conda_yml'
    }
    
  4. Crie um arquivo yaml que contenha a lista de pacotes e salve-o como customlibrary.yaml.

    Exemplo de arquivo yaml:

    name: add-regex-package
    dependencies:
        - regex
    

    Para obter mais informações, consulte:

  5. Armazene as informações de extensão do pacote.

    pe_asset_details = wml_client.package_extensions.store(
        meta_props=pe_metadata,
        file_path='customlibrary.yaml'
    )
    pe_asset_id = wml_client.package_extensions.get_id(pe_asset_details)
    
  6. Crie os metadados para a especificação de software e armazene a especificação de software.

    # Get the id of the base software specification
    base_id = wml_client.software_specifications.get_id_by_name('default_py3.9')
    
    # create the metadata for software specs
    ss_metadata = {
        wml_client.software_specifications.ConfigurationMetaNames.NAME:
            'Python 3.9 with pre-installed ML package',
        wml_client.software_specifications.ConfigurationMetaNames.DESCRIPTION:
            'Adding some custom libraries like regex', # optional
        wml_client.software_specifications.ConfigurationMetaNames.BASE_SOFTWARE_SPECIFICATION:
            {'guid': base_id},
        wml_client.software_specifications.ConfigurationMetaNames.PACKAGE_EXTENSIONS:
            [{'guid': pe_asset_id}]
    }
    
    # store the software spec
    ss_asset_details = wml_client.software_specifications.store(meta_props=ss_metadata)
    
    # get the id of the new asset
    asset_id = wml_client.software_specifications.get_id(ss_asset_details)
    
    # view new software specification details
    import pprint as pp
    
    ss_asset_details = wml_client.software_specifications.get_details(asset_id)
    print('Package extensions', pp.pformat(
        ss_asset_details['entity']['software_specification']['package_extensions']
    ))
    

Salvar uma biblioteca criada pelo usuário no Python e criar uma extensão de pacote

Para obter mais informações, consulte Requisitos para usar componentes personalizados em modelos.

Para salvar um pacote criado pelo usuário ( Python ) como uma extensão de pacote e criar uma especificação de software personalizada vinculada à extensão do pacote:

  1. Autentique e crie o cliente.

  2. Crie e configure o espaço de implementação padrão, em seguida, liste as especificações de software disponíveis.

     metadata = {
         wml_client.spaces.ConfigurationMetaNames.NAME:
             'examples-create-software-spec',
         wml_client.spaces.ConfigurationMetaNames.DESCRIPTION:
             'For my models'
     }
     space_details = wml_client.spaces.store(meta_props=metadata)
     space_uid = wml_client.spaces.get_id(space_details)
    
     # set the default space
     wml_client.set.default_space(space_uid)
    
     # see available meta names for software specs
     print('Available software specs configuration:', wml_client.software_specifications.ConfigurationMetaNames.get())
     wml_client.software_specifications.list()
    
     asset_id = 'undefined'
     pe_asset_id = 'undefined'
    
  3. Crie os metadados para extensões de pacote a serem incluídas na especificação de base.

    Nota:

    Você pode especificar pip_zip apenas como um valor para a propriedade wml_client.package_extensions.ConfigurationMetaNames.TYPE de metadados.

    pe_metadata = {
        wml_client.package_extensions.ConfigurationMetaNames.NAME:
            'My Python library',
        # optional:
        # wml_client.software_specifications.ConfigurationMetaNames.DESCRIPTION:
        wml_client.package_extensions.ConfigurationMetaNames.TYPE:
            'pip.zip'
    }
    
  4. Especifique o caminho da biblioteca Python criada pelo usuário.

    python_lib_file_path="my-python-library-0.1.zip"
    

    Para obter mais informações, consulte Requisitos para usar componentes personalizados em modelos.

  5. Armazene as informações de extensão do pacote.

    pe_asset_details = wml_client.package_extensions.store(
        meta_props=pe_metadata,
        file_path=python_lib_file_path
    )
    pe_asset_id = wml_client.package_extensions.get_id(pe_asset_details)
    
  6. Crie os metadados para a especificação de software e armazene a especificação de software.

    # Get the id of the base software specification
    base_id = wml_client.software_specifications.get_id_by_name('default_py3.9')
    
    # create the metadata for software specs
    ss_metadata = {
        wml_client.software_specifications.ConfigurationMetaNames.NAME:
            'Python 3.9 with pre-installed ML package',
        wml_client.software_specifications.ConfigurationMetaNames.DESCRIPTION:
            'Adding some custom libraries like regex', # optional
        wml_client.software_specifications.ConfigurationMetaNames.BASE_SOFTWARE_SPECIFICATION:
            {'guid': base_id},
        wml_client.software_specifications.ConfigurationMetaNames.PACKAGE_EXTENSIONS:
            [{'guid': pe_asset_id}]
    }
    
    # store the software spec
    ss_asset_details = wml_client.software_specifications.store(meta_props=ss_metadata)
    
    # get the id of the new asset
    asset_id = wml_client.software_specifications.get_id(ss_asset_details)
    
    # view new software specification details
    import pprint as pp
    
    ss_asset_details = wml_client.software_specifications.get_details(asset_id)
    print('Package extensions', pp.pformat(
        ss_asset_details['entity']['software_specification']['package_extensions']
    ))
    

Resolução de problemas

Quando uma instalação de conda biblioteca personalizada baseada em yml falhar com este erro: Encountered error while installing custom library, tente estas alternativas:

  • Use uma versão diferente do mesmo pacote que está disponível no Anaconda para a versão do Python em questão.

  • Instale a biblioteca a partir do pypi repositório, utilizando pip. Edite o conteúdo do arquivo conda de instalação yml:

    name: <conda yml file name>
    dependencies:
    - numpy
    - pip:
        - pandas==1.2.5
    
  • Use imagens personalizadas

Personalizar as configurações que controlam a forma como os conda pacotes pip e são obtidos

Todos os tempos de execução de implantação no Watson Machine Learning incluem um conjunto pré-selecionado de pacotes e bibliotecas. Se determinadas bibliotecas ou pacotes não estiverem incluídos no tempo de execução de implantação padrão, você pode adicioná-los personalizando as configurações que controlam a maneira como os conda pacotes pip e são obtidos. Os recursos de implantação que oferecem suporte a essa personalização são Scikit-learn, XGBoost, modelos Tensorflow, funções Python e scripts Python.

Para obter mais informações, consulte os tópicos a seguir: