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

Você pode customizar os tempos de execução de implementação nestes modos:

Definir personalizações em um projeto watsonx.ai Studio e, em seguida, promovê-las para um espaço de implantação

Os ambientes nos projetos do watsonx.ai 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 do ambiente customizado, estas etapas são executadas internamente (visível para o usuário):

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

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

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

Para exportar especificações de software personalizado e extensões de pacote que foram criadas em um projeto do watsonx.ai Studio para um espaço de implementação:

  1. A partir da sua interface de projeto, clique na guia Gerenciar .
  2. Selecione Ambientes.
  3. Clique na guia Templates .
  4. A partir do menu Opções do seu ambiente personalizado, selecione Promover para o espaço.

Seleção de "Promover para o espaço" para um ambiente personalizado na interface do watsonx.ai Studio

Como alternativa, quando você promove qualquer modelo ou função Python associada a um ambiente personalizado de um projeto watsonx.ai Studio para um espaço de implementação, a especificação de software personalizado associada e a extensão de pacote também são promovidas para o espaço de implementação.

Se desejar atualizar as especificações de software e as extensões de pacote depois de promovê-las para o espaço de implementação, siga estas etapas:

  1. No espaço de implementação, exclua as especificações de software, extensões de pacotes e modelos associados (opcionais) usando o cliente watsonx.ai Python .
  2. Em um projeto, promova o modelo, a função ou o script que está associado à especificação de software customizada alterada e à extensão de 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.

Criação de extensões de pacotes e especificações de software personalizadas em um espaço de implantação usando o cliente Python de tempo de execução watsonx.ai

Você pode usar as APIs de tempo de execução do watsonx.ai ou o cliente Python para definir uma especificação de software personalizada que seja derivada de uma especificação básica.

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

  1. Opcional: Salve um arquivo conda 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.

    Nota: essa etapa não será 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. Inclua uma referência das extensões de pacotes na especificação de software personalizada que você criou.

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

Para salvar um arquivo conda 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, em seguida, salve-o como customlibrary.yaml

    Exemplo de arquivo yaml:

    name: add-regex-package
    dependencies:
        - regex
    

    Para obter mais informações, consulte Exemplos de customizações

  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']
    ))
    

Salvando uma biblioteca Python criada pelo usuário e criando uma extensão de pacote

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

Para salvar um pacote Python criado pelo usuário como uma extensão de pacote e criar uma especificação de software customizada vinculada à extensão de 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:

    É possível especificar pip_zip somente como um valor para a propriedade de metadados wml_client.package_extensions.ConfigurationMetaNames.TYPE .

    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 customizados 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 biblioteca personalizada baseada em conda 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 em Anaconda para a versão em questão Python .

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

    name: <conda yml file name>
    dependencies:
    - numpy
    - pip:
        - pandas==1.2.5