重要说明:

IBM Cloud Pak® for Data 4.8 版本将于 2025 年 7 月 31 日结束支持(EOS)。 欲了解更多信息,请参阅 IBM Cloud Pak for Data 版本 4.X 的停止服务公告
在 版本支持结束之前,升级到 版本。 IBM Cloud Pak for Data 4.8 IBM Software Hub 5.1 有关更多信息,请参阅从 IBM Cloud Pak for Data 版本 4.8 升级到 IBM Software Hub 版本 5.1

使用第三方和专用 Python 库进行定制

如果您的模型需要定制组件 (例如,用户定义的变换器,估计量或用户定义的张量) ,那么您可以创建派生自基本规范或预定义规范的定制软件规范。 Python 函数和 Python 脚本还支持定制软件规范。

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

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

有关更多信息,请参阅故障诊断

在 Watson Studio 项目中定义定制,然后将其提升到部署空间

可以定制 Watson Studio 项目中的环境,以包含可从 Anaconda 或 PyPI 存储库安装的第三方库。

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

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

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

使用定制环境创建的模型或 Python 函数/脚本在项目作用域中的 Watson Machine Learning 存储库中保存时,必须引用定制软件规范。

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

要将在 Watson Studio 项目中创建的定制软件规范和软件包扩展导出到部署空间:

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

在 Watson Studio 界面中为定制环境选择 "提升到空间"

或者,当您将与定制环境关联的任何模型或 Python 函数从 Watson Studio 项目提升到部署空间时,关联的定制软件规范和包扩展也会提升到部署空间。

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

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

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

使用 Watson Machine Learning Python 客户机在部署空间中创建软件包扩展和定制软件规范

您可以使用 Watson Machine Learning 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']
    ))
    

定制用于控制获取 conda 和 pip 包的方式的设置

Watson Machine Learning 中的所有部署运行时都包含一组预先选择的软件包和库。 如果标准部署运行时中未包含某些库或包,那么可以通过定制用于控制获取 conda 和 pip 包的方式的设置来添加这些库或包。 支持此定制的部署资产包括 Scikit-learn , XGBoost , Tensorflow 模型, Python 函数和 Python 脚本。

有关更多信息,请参阅以下主题:

故障诊断

如果基于 conda yml 的定制库安装失败,出现以下错误:Encountered error while installing custom library,请尝试以下替代方法:

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

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

    name: <conda yml file name>
    dependencies:
    - numpy
    - pip:
        - pandas==1.2.5
    
  • 使用定制图像。 有关更多信息,请参阅 创建定制 Watson Machine Learning 映像

父主题: 定制部署运行时