0 / 0
Retourner à la version anglaise de la documentation
Écrire des fonctions Python déployables
Dernière mise à jour : 04 déc. 2024
Écrire des fonctions Python déployables

Apprenez à écrire une fonction Python et à la stocker en tant qu'actif que vous pouvez utiliser pour déployer des modèles.

Pour obtenir une liste des exigences générales relatives aux fonctions déployables, voir Exigences générales relatives aux fonctions déployables. Pour plus d'informations sur ce qui se passe lors d'un déploiement de fonction, voir Processus de déploiement de fonction

Exigences générales relatives aux fonctions déployables

Pour être déployée avec succès, une fonction doit répondre à ces exigences :

  • Le fichier de fonction Python à l'importation doit avoir l'objet de fonction score dans sa portée. Voir Exigences de la fonction de score
  • Le contenu d'entrée d'évaluation doit répondre aux exigences répertoriées dans Exigences d'entrée d'évaluation
  • Le contenu de sortie attendu comme sortie de score doit inclure le schéma de la variable score_response pour le code d'état 200. Notez que le paramètre prediction, avec un tableau d'objets JSON comme valeur, est obligatoire dans la sortie score.
  • Lorsque vous utilisez le client Python pour enregistrer une fonction Python qui contient une référence à une fonction externe, seul le code dans la portée de la fonction externe (y compris ses fonctions imbriquées) est sauvegardé. Par conséquent, le code en dehors de la portée de la fonction externe ne sera pas sauvegardé et ne sera donc pas disponible lorsque vous déployez la fonction.

Exigences de la fonction de score

  • Il existe deux façons d'ajouter l'objet de fonction score :
    • Explicitement, par l'utilisateur
    • implicitement, par la méthode utilisée pour sauvegarder la fonction Python en tant qu'actif dans le référentiel watsonx.ai Runtime
  • La fonction " score peut accepter un seul paramètre d'entrée JSON ou deux paramètres : la charge utile et le jeton du porteur.
  • La fonction score doit renvoyer un objet sérialisable JSON (par exemple, des dictionnaires ou des listes).

Évaluation des entrées d'évaluation

  • Le contenu d'entrée de score doit inclure un tableau portant le nom values, comme indiqué dans cet exemple de schéma. Le paramètre input_data est obligatoire dans le contenu. Le paramètre input_data peut également inclure des paires nom-valeur supplémentaires.

    {"input_data": [{
       "values": [["Hello world!"]]
                   }]
    }
    
  • La charge utile d'entrée de notation doit être transmise en tant que valeur de paramètre d'entrée pour " score. Ainsi, vous pouvez vous assurer que la valeur du paramètre d'entrée score est traitée en conséquence dans score.

  • La charge d'entrée d'évaluation doit satisfaire les exigences d'entrée de la fonction Python concernée.

  • La charge d'entrée de score doit inclure un tableau qui correspond à l'exemple de schéma de données d'entrée.

Exemple de schéma de données d'entrée

 {"input_data": [{
    "values": [["Hello, world!"]]
                }]
 }

Exemple de code Python (charge utile et jeton)

#wml_python_function
def my_deployable_function():

    def score(payload, token):

        message_from_input_payload = payload.get("input_data")[0].get("values")[0][0]
        response_message = "Received message - {0}".format(message_from_input_payload)

        # Score using the pre-defined model
        score_response = {
            'predictions': [{'fields': ['Response_message_field'],
                             'values': [[response_message]]
                            }]
        }
        return score_response

    return score

score = my_deployable_function()

Tester votre fonction Python

Voici comment vous pouvez tester votre fonction Python:

input_data = { "input_data": [{ "fields": [ "message" ],
                                "values": [[ "Hello, world!" ]]
                               }
                              ]
             }
function_result = score( input_data )
print( function_result )

Il renvoie le message "Hello, world !".

Processus de déploiement de fonction

Le code Python de votre ressource Function est chargé en tant que module Python par le moteur d'exécution watsonx.ai à l'aide d'une instruction " import. Cela signifie que le code sera exécuté exactement une fois (lorsque la fonction sera déployée ou à chaque fois que le pod correspondant sera redémarré). La fonction score définie par l'actif Fonction est ensuite appelée dans chaque demande de prévision.

Traitement des fonctions déployables

Utilisez l'une de ces méthodes pour créer une fonction Python déployable :

Avant de commencer

Vous devez définir les informations d'identification de votre tâche en générant une clé API. Pour plus d'informations, voir Gestion des informations d'identification des tâches.

Création de fonctions déployables via l'API REST

Pour les API REST, la fonction Python étant téléchargée directement via un fichier, ce dernier doit déjà contenir la fonction score . Toute importation unique qui doit être effectuée pour être utilisée ultérieurement dans la fonction score peut être effectuée dans la portée globale du fichier. Lorsque ce fichier est déployé en tant que fonction Python, les importations uniques disponibles dans la portée globale sont exécutées au cours du déploiement et sont simplement réutilisées avec chaque demande de prévision.

Important :

L'archive de fonction doit être un fichier .gz .

Exemple de fichier de fonctionscore :

Score function.py
---------------------
def score(input_data):
    return {'predictions': [{'values': [['Just a test']]}]}

Exemple de fonction score avec d'importation unique :

import subprocess
subprocess.check_output('pip install gensim --user', shell=True)
import gensim

def score(input_data):
    return {'predictions': [{'fields': ['gensim_version'], 'values': [[gensim.__version__]]}]}

Création de fonctions déployables via le client Python

Pour conserver une fonction Python en tant qu'actif, le client Python utilise la méthode wml_client.repository.store_function. Vous pouvez persister une fonction Python de deux manières :

Conservation d'une fonction via un fichier contenant la fonction Python

Cette méthode est identique à la persistance du fichier de fonctions Python via les API REST (score doit être défini dans la portée du fichier source Python ). Pour plus de détails, voir Création de fonctions déployables via l'API REST.

Important :

Lorsque vous appelez la méthode wml_client.repository.store_function , transmettez le nom de fichier comme premier argument.

Persistance d'une fonction via l'objet de fonction

Vous pouvez conserver des objets de fonction Python en créant Python Closures avec une fonction imbriquée nommée score. La fonction score est renvoyée par la fonction externe qui est stockée en tant qu'objet de fonction, lorsqu'elle est appelée. Cette fonction score doit répondre aux exigences répertoriées dans Exigences générales pour les fonctions déployables. Dans ce cas, les importations à usage unique et la logique de configuration initiale doivent être ajoutées dans la fonction imbriquée externe afin qu'elles soient exécutées lors du déploiement et utilisées dans la fonction score . Toute logique récurrente nécessaire lors de la demande prediction doit être ajoutée dans la fonction score imbriquée.

Exemple de sauvegarde de fonction Python à l'aide du client Python :

def my_deployable_function():

    import subprocess
    subprocess.check_output('pip install gensim', shell=True)
    import gensim

    def score(input_data):
        import
        message_from_input_payload = payload.get("input_data")[0].get("values")[0][0]
        response_message = "Received message - {0}".format(message_from_input_payload)

        # Score using the pre-defined model
        score_response = {
            'predictions': [{'fields': ['Response_message_field', 'installed_lib_version'],
                             'values': [[response_message, gensim.__version__]]
                            }]
        }
        return score_response

    return score

function_meta = {
    client.repository.FunctionMetaNames.NAME:"test_function",
    client.repository.FunctionMetaNames.SOFTWARE_SPEC_ID: sw_spec_id
}
func_details = client.repository.store_function(my_deployable_function, function_meta)

Dans ce scénario, la fonction Python se charge de créer un fichier Python qui contient la fonction " score et de persister le fichier de fonction en tant qu'actif dans le référentiel Runtime de watsonx.ai

score = my_deployable_function()

En savoir plus

Rubrique parent : Déploiement de fonctions Python

Recherche et réponse à l'IA générative
Ces réponses sont générées par un modèle de langue de grande taille dans watsonx.ai en fonction du contenu de la documentation du produit. En savoir plus