Puede utilizar la especificación de software personalizada para hacer referencia a las bibliotecas de terceros, los paquetes de Python creados por el usuario, o ambas cosas. Las bibliotecas de terceros o los paquetes Python creados por el usuario se deben especificar como extensiones de paquete para que se pueda hacer referencia a ellas en una especificación de software personalizada.
Puede personalizar los tiempos de ejecución de despliegue de estas maneras:
- Definir personalizaciones en un proyecto de watsonx.ai Studio y, a continuación, promoverlas a un espacio de despliegue
- Crear extensiones de paquetes y especificaciones de software personalizadas en un espacio de despliegue mediante el cliente watsonx.ai Runtime Python
Definición de personalizaciones en un proyecto de watsonx.ai Studio y posterior promoción a un espacio de despliegue
Los entornos en los proyectos de watsonx.ai Studio pueden personalizarse para incluir librerías de terceros que pueden instalarse desde Anaconda o desde el repositorio PyPI.
Para obtener más información, consulte Entornos.
Como parte de la creación del entorno personalizado, estos pasos se realizan internamente (visibles para el usuario):
- Una extensión de paquete que contiene los detalles de bibliotecas de terceros se crea en
conda YAML format
. - Se crea una especificación de software personalizada con el mismo nombre que el entorno personalizado y la extensión de paquete que se crea se asocia con esta especificación de software personalizada.
Los modelos o funciones/scripts Python creados con el entorno personalizado deben hacer referencia a la especificación de software personalizado cuando se guardan en el repositorio watsonx.ai Runtime en el ámbito del proyecto.
Propagación de especificaciones de software y extensiones de paquete de proyectos a espacios de despliegue
Para exportar especificaciones de software personalizadas y extensiones de paquetes creadas en un proyecto de watsonx.ai Studio a un espacio de despliegue:
- En la interfaz del proyecto, pulse el separador Gestionar .
- Seleccione Entornos.
- Pulse la pestaña Plantillas .
- En el menú Opciones del entorno personalizado, seleccione Promocionar al espacio.
De forma alternativa, cuando se promociona cualquier modelo o función Python que esté asociada a un entorno personalizado desde un proyecto de watsonx.ai Studio a un espacio de despliegue, la especificación de software personalizado y la extensión de paquete asociadas también se promocionan al espacio de despliegue.
Si desea actualizar las especificaciones de software y las extensiones de paquete después de promocionarlas al espacio de despliegue, siga estos pasos:
- En el espacio de despliegue, suprima las especificaciones de software, extensiones de paquete y modelos asociados (opcional) utilizando el cliente Python watsonx.ai .
- En un proyecto, promocione el modelo, función o script que está asociado con la especificación de software personalizada modificada y la extensión de paquete al espacio.
Las especificaciones de software también se incluyen cuando se importa un proyecto o espacio que incluye uno.
Creación de extensiones de paquetes y especificaciones de software personalizadas en un espacio de despliegue mediante el cliente watsonx.ai Runtime Python
Puede utilizar las API de tiempo de ejecución de watsonx.ai o el cliente Python para definir una especificación de software personalizada derivada de una especificación base.
Pasos de alto nivel para crear una especificación de software personalizada que utilice bibliotecas de terceros o paquetes Python creados por el usuario:
Opcional: Guarde un archivo YAML de conda que contenga una lista de bibliotecas de terceros o guarde una biblioteca Python creada por el usuario y cree una extensión de paquete.
Nota: Este paso no es necesario si el modelo no tiene ninguna dependencia de una biblioteca de terceros o de una biblioteca Python creada por el usuario.Cree una especificación de software personalizada
Añada una referencia de las extensiones de paquete a la especificación de software personalizada que ha creado.
Guardar un archivo YAML de conda que contiene una lista de bibliotecas de terceros
Para guardar un archivo YAML de conda que contiene una lista de bibliotecas de terceros como una extensión de paquete y crear una especificación de software personalizada que está enlazada a la extensión de paquete:
Autentique y cree el cliente.
Cree y establezca el espacio de despliegue predeterminado y, a continuación, obtenga una lista de las especificaciones de software disponibles.
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'
Cree los metadatos para las extensiones de paquetes que se añaden a la especificación 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' }
Cree un archivo yaml que contenga la lista de paquetes y, a continuación, guárdelo como
customlibrary.yaml
.Ejemplo de archivo yaml:
name: add-regex-package dependencies: - regex
Para obtener más información, consulte Ejemplos de personalizaciones.
Almacene la información de extensión de paquete.
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)
Cree los metadatos para la especificación de software y almacene la especificación 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'] ))
Guardar una biblioteca Python creada por el usuario y crear una extensión de paquete
Para obtener más información, consulte Requisitos para utilizar componentes personalizados en modelos.
Para guardar un paquete Python creado por el usuario como una extensión de paquete y crear una especificación de software personalizada que esté enlazada a la extensión de paquete:
Autentique y cree el cliente.
Cree y establezca el espacio de despliegue predeterminado y, a continuación, obtenga una lista de las especificaciones de software disponibles.
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'
Cree los metadatos para las extensiones de paquetes que se añaden a la especificación base.
Nota:Sólo puede especificar
pip_zip
como un valor para la propiedad de metadatoswml_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' }
Especifique la vía de acceso de la biblioteca Python creada por el usuario.
python_lib_file_path="my-python-library-0.1.zip"
Para obtener más información, consulte Requisitos para utilizar componentes personalizados en modelos.
Almacene la información de extensión de paquete.
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)
Cree los metadatos para la especificación de software y almacene la especificación 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'] ))
Resolución de problemas
When a conda yml-based custom library installation fails with this error: Encountered error while installing custom library
, try these alternatives:
Utilice una versión diferente del mismo paquete que está disponible en Anaconda para la versión de Python correspondiente.
Instale la biblioteca desde el repositorio pypi, utilizando pip. Edite el contenido del archivo de instalación yml de conda:
name: <conda yml file name> dependencies: - numpy - pip: - pandas==1.2.5
Tema padre: Personalización de tiempos de ejecución de despliegue