0 / 0
Go back to the English version of the documentation
使用外部库和软件包定制运行时
Last updated: 2024年11月21日
使用外部库和软件包定制运行时

您可以使用定制软件规范来引用任何第三方库和/或用户创建的 Python 软件包。 必须将第三方库或用户创建的 Python 包指定为包扩展,以便可以在定制软件规范中引用这些库或包。

您可以通过以下方式定制部署运行时:

在watsonx.aiStudio 项目中定义自定义,然后将其推广到部署空间

watsonx.aiStudio项目中的环境可以自定义,以包含第三方库,这些第三方库可以从Anaconda或PyPI库中安装。

有关更多信息,请参阅 环境

作为定制环境创建的一部分,这些步骤在内部执行 (对用户可见):

  • 将在 conda YAML format中创建包含第三方库详细信息的包扩展。
  • 将创建与定制环境同名的定制软件规范,并且创建的软件包扩展将与此定制软件规范相关联。

使用自定义环境创建的模型或Python函数/脚本在保存到项目范围内的watsonx.aiRuntime 资源库时,必须引用自定义软件规范。

将软件规范和软件包扩展从项目传播到部署空间

将在watsonx.aiStudio 项目中创建的自定义软件规格和软件包扩展导出到部署空间:

  1. 在项目界面中,单击 管理 选项卡。
  2. 选择 环境
  3. 单击 模板 选项卡。
  4. 从定制环境的 选项 菜单中,选择 提升到空间

在watsonx.aiStudio 界面中为自定义环境选择 "提升到空间"

或者,当您将watsonx.aiStudio 项目中与自定义环境相关联的任何模型或Python函数推广到部署空间时,相关的自定义软件规范和软件包扩展也会推广到部署空间。

如果要在将软件规范和软件包扩展提升到部署空间后更新这些规范和软件包扩展,请执行以下步骤:

  1. 在部署空间中,使用 watsonx.ai Python 客户机删除软件规范,软件包扩展和关联模型 (可选)。
  2. 在项目中,将与已更改的定制软件规范和包扩展相关联的模型,函数或脚本提升到空间。

导入包含软件规范的项目或空间时,也会包含软件规范。

使用watsonx.aiRuntimePython客户端在部署空间中创建软件包扩展和自定义软件规范

您可以使用watsonx.ai运行时API或Python客户端,定义从基础规范衍生而来的自定义软件规范。

用于创建使用第三方库或用户创建的 Python 包的定制软件规范的高级步骤:

  1. 可选: 保存包含第三方库列表的 conda YAML 文件保存用户创建的 Python 库并创建包扩展

    注: 如果模型不依赖于第三方库或用户创建的 Python 库,那么不需要执行此步骤。
  2. 创建定制软件规范

  3. 将软件包扩展的引用添加到您创建的定制软件规范。

保存包含第三方库列表的 conda YAML 文件

要将包含第三方库列表的 conda YAML 文件保存为包扩展,并创建链接到包扩展的定制软件规范:

  1. 认证并创建客户机。

  2. 创建并设置缺省部署空间,然后列出可用的软件规范。

     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. 创建要添加到基本规范的软件包扩展的元数据。

    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. 创建包含软件包列表的 yaml 文件,然后将其另存为 customlibrary.yaml

    示例 yaml 文件:

    name: add-regex-package
    dependencies:
        - regex
    

    有关更多信息,请参阅 定制示例

  5. 商店软件包扩展信息。

    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. 创建软件规范的元数据并存储软件规范。

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

保存用户创建的 Python 库并创建程序包扩展

有关更多信息,请参阅 在模型中使用定制组件的需求

要将用户创建的 Python 包另存为包扩展,并创建链接到包扩展的定制软件规范:

  1. 认证并创建客户机。

  2. 创建并设置缺省部署空间,然后列出可用的软件规范。

     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. 创建要添加到基本规范的软件包扩展的元数据。

    注:

    只能将 pip_zip 指定为 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. 指定用户创建的 Python 库的路径。

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

    有关更多信息,请参阅 在模型中使用定制组件的需求

  5. 商店软件包扩展信息。

    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. 创建软件规范的元数据并存储软件规范。

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

故障诊断

When a conda yml-based custom library installation fails with this error: Encountered error while installing custom library, try these alternatives:

  • 对于相关的 Python 版本,请使用 Anaconda 中提供的相同软件包的不同版本。

  • 使用 pip 从 pypi 存储库安装库。 编辑 conda yml 安装文件内容:

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

父主题: 定制部署运行时

Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more