Vous pouvez utiliser une spécification logicielle personnalisée pour faire référence à des bibliothèques tierces et/ou des packages Python créés par l'utilisateur. Les bibliothèques tierces ou les packages Python créés par l'utilisateur doivent être spécifiés en tant qu'extensions de package afin qu'ils puissent être référencés dans une spécification logicielle personnalisée.
Vous pouvez personnaliser les environnements d'exécution de déploiement de l'une des manières suivantes:
- Définir des personnalisations dans un projet watsonx.ai Studio puis les promouvoir dans un espace de déploiement
- Créer des extensions de paquets et des spécifications logicielles personnalisées dans un espace de déploiement en utilisant le client Runtime 'watsonx.ai 'Python
Définir des personnalisations dans un projet watsonx.ai Studio et les promouvoir ensuite dans un espace de déploiement
Les environnements des projets watsonx.ai Studio peuvent être personnalisés pour inclure des bibliothèques tierces qui peuvent être installées à partir d'Anaconda ou du dépôt PyPI.
Pour plus d'informations, voir Environnements.
Dans le cadre de la création d'environnement personnalisé, ces étapes sont effectuées en interne (visible par l'utilisateur):
- Une extension de package contenant les détails des bibliothèques tierces est créée dans
conda YAML format
. - Une spécification logicielle personnalisée portant le même nom que l'environnement personnalisé est créée et l'extension de package créée est associée à cette spécification logicielle personnalisée.
Les modèles ou les fonctions/scripts Python créés avec l'environnement personnalisé doivent faire référence à la spécification du logiciel personnalisé lorsqu'ils sont enregistrés dans le référentiel watsonx.ai Runtime dans le cadre du projet.
Propagation des spécifications logicielles et des extensions de package des projets vers les espaces de déploiement
Pour exporter des spécifications logicielles personnalisées et des extensions de paquetage créées dans un projet watsonx.ai Studio vers un espace de déploiement :
- Dans l'interface de votre projet, cliquez sur l'onglet Gérer .
- Sélectionnez Environnements.
- Cliquez sur l'onglet Modèles .
- Dans le menu Options de votre environnement personnalisé, sélectionnez Promouvoir dans l'espace.
Par ailleurs, lorsque vous promouvez un modèle ou une fonction Python associé à un environnement personnalisé d'un projet watsonx.ai Studio vers un espace de déploiement, la spécification du logiciel personnalisé associé et l'extension du paquetage sont également promus vers l'espace de déploiement.
Si vous souhaitez mettre à jour les spécifications logicielles et les extensions de package après les avoir promies dans l'espace de déploiement, procédez comme suit:
- Dans l'espace de déploiement, supprimez les spécifications logicielles, les extensions de package et les modèles associés (facultatif) à l'aide du client Python watsonx.ai .
- Dans un projet, promouvez le modèle, la fonction ou le script associé à la spécification de logiciel personnalisée modifiée et à l'extension de package dans l'espace.
Les spécifications logicielles sont également incluses lorsque vous importez un projet ou un espace qui en inclut un.
Création d'extensions de paquets et de spécifications logicielles personnalisées dans un espace de déploiement en utilisant le client Python watsonx.ai Runtime
Vous pouvez utiliser les API d'exécution de watsonx.ai ou le client Python pour définir une spécification logicielle personnalisée dérivée d'une spécification de base.
Etapes de haut niveau pour créer une spécification logicielle personnalisée qui utilise des bibliothèques tierces ou des packages Python créés par l'utilisateur:
Facultatif: Sauvegardez un fichier YAML conda qui contient une liste de bibliothèques tierces ou sauvegardez une bibliothèque Python créée par l'utilisateur et créez une extension de package.
Remarque: Cette étape n'est pas requise si le modèle n'a pas de dépendance à une bibliothèque tierce ou à une bibliothèque Python créée par l'utilisateur.Créez une spécification logicielle personnalisée.
Ajoutez une référence des extensions de package à la spécification de logiciel personnalisée que vous avez créée.
Enregistrement d'un fichier YAML conda contenant une liste de bibliothèques tierces
Pour sauvegarder un fichier YAML conda contenant une liste de bibliothèques tierces en tant qu'extension de package et créer une spécification de logiciel personnalisée liée à l'extension de package:
Authentifiez et créez le client.
Créez et désignez l'espace de déploiement par défaut, puis listez les spécifications logicielles 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'
Créez les métadonnées pour des extensions de package à ajouter à la spécification 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' }
Créez un fichier yaml contenant la liste des packages, puis enregistrez-le en tant que
customlibrary.yaml
.Exemple de fichier yaml :
name: add-regex-package dependencies: - regex
Pour plus d'informations, voir Exemples de personnalisations.
Stockez les informations d'extension de package.
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)
Créez les métadonnées pour la spécification logicielle et stockez celle-ci.
# 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'] ))
Sauvegarde d'une bibliothèque Python créée par l'utilisateur et création d'une extension de package
Pour plus d'informations, voir Conditions d'utilisation des composants personnalisés dans les modèles.
Pour sauvegarder un package Python créé par l'utilisateur en tant qu'extension de package et créer une spécification logicielle personnalisée liée à l'extension de package:
Authentifiez et créez le client.
Créez et désignez l'espace de déploiement par défaut, puis listez les spécifications logicielles 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'
Créez les métadonnées pour des extensions de package à ajouter à la spécification de base.
Remarque :Vous pouvez spécifier
pip_zip
uniquement en tant que valeur pour la propriété de métadonnéeswml_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' }
Indiquez le chemin de la bibliothèque Python créée par l'utilisateur.
python_lib_file_path="my-python-library-0.1.zip"
Pour plus d'informations, voir Conditions d'utilisation des composants personnalisés dans les modèles.
Stockez les informations d'extension de package.
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)
Créez les métadonnées pour la spécification logicielle et stockez celle-ci.
# 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'] ))
Traitement des incidents
When a conda yml-based custom library installation fails with this error: Encountered error while installing custom library
, try these alternatives:
Utilisez une version différente du même package disponible dans Anaconda pour la version Python concernée.
Installez la bibliothèque à partir du référentiel pypi, à l'aide de pip. Editez le contenu du fichier fichier d'installation yml conda :
name: <conda yml file name> dependencies: - numpy - pip: - pandas==1.2.5
Rubrique parent: Personnalisation des environnements d'exécution de déploiement