0 / 0
Go back to the English version of the documentation
Zapisywanie wdrażalnych funkcji Python
Last updated: 14 sie 2023
Zapisywanie wdrażalnych funkcji Python

Sekcja zawiera informacje na temat pisania funkcji Python , a następnie przechowywania ich jako zasobu aplikacyjnego, który umożliwia wdrażanie modeli.

Listę ogólnych wymagań dotyczących wdrażalnych funkcji można znaleźć w temacie Ogólne wymagania dla funkcji wdrażalnych. Informacje na temat tego, co dzieje się podczas wdrażania funkcji, można znaleźć w sekcji Proces wdrażania funkcji .

Wymagania ogólne dotyczące wdrażalnych funkcji

Aby możliwe było pomyślne wdrożenie, funkcja musi spełniać następujące wymagania:

  • Plik funkcji Python w imporcie musi mieć obiekt funkcji score jako część jego zasięgu. Zapoznaj się z wymaganiami funkcji oceny
  • Ładunek danych wejściowych oceniania musi spełniać wymagania wymienione w sekcji Wymagania wejściowe dotyczące oceniania .
  • Dane wyjściowe oczekiwane jako dane wyjściowe produktu score muszą zawierać schemat zmiennej score_response dla kodu statusu 200. Należy pamiętać, że parametr prediction z tablicą obiektów JSON jako jego wartością jest obowiązkowy w danych wyjściowych komendy score .
  • Jeśli klient Python jest używany do zapisywania funkcji Python , która zawiera odwołanie do funkcji zewnętrznej, wówczas zapisywany jest tylko kod z zasięgu funkcji zewnętrznej (wraz z jej funkcjami zagnieżdżonymi). Dlatego kod spoza zakresu funkcji zewnętrznej nie zostanie zapisany i w związku z tym nie będzie dostępny podczas wdrażania funkcji.

Wymagania dotyczące funkcji oceny

  • Istnieją dwa sposoby dodawania obiektu funkcji score :
    • jawnie, przez użytkownika
    • niejawnie za pomocą metody, która jest używana do zapisywania funkcji Python jako zasobu aplikacyjnego w repozytorium Watson Machine Learning
  • Funkcja score musi akceptować pojedynczy parametr wejściowy JSON.
  • Funkcja score musi zwracać obiekt JSON-serializable (na przykład: słowniki lub lists)

Ocenianie wymagań wejściowych

  • Ładunek wejściowy oceniania musi zawierać tablicę o nazwie values, jak to pokazano w tym przykładowym schemacie.

    {"input_data": [{
       "values": [["Hello world!"]]
                   }]
    }
    
    Uwaga:
    -Parametr ` input_data ` jest obowiązkowy w ładunku.
    -Parametr ` input_data ` może również zawierać dodatkowe pary nazwa-wartość.
  • Ładunek wejściowy oceniania musi być przekazywany jako wartość parametru wejściowego dla score. W ten sposób można się upewnić, że wartość parametru wejściowego score jest obsługiwana odpowiednio wewnątrz partycji score.

  • Ładunek danych wejściowych oceniania musi być zgodny z wymaganiami wejściowymi dla danej funkcji Python .

  • Ładunek danych wejściowych oceniania musi zawierać tablicę, która jest zgodna z przykładowym schematem danych wejściowych.

Przykładowy schemat danych wejściowych

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

Przykładowy kod Python

#wml_python_function
def my_deployable_function():

    def score( payload ):

        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()

Można przetestować swoją funkcję w następujący sposób:
input_data = { "input_data": [{ "fields": [ "message" ],
                                "values": [[ "Hello world!" ]]
                               }
                              ]
             }
function_result = score( input_data )
print( function_result )

Zwraca komunikat "Hello world!".

Proces wdrażania funkcji

Kod Python zasobu funkcji jest ładowany jako moduł Python przez mechanizm Watson Machine Learning przy użyciu instrukcji import . Oznacza to, że kod zostanie wykonany dokładnie raz (po wdrożeniu funkcji lub za każdym razem, gdy odpowiedni strąk zostanie zrestartowany). Funkcja score zdefiniowana przez zasób funkcji jest wywoływana w każdym żądaniu predykcji.

Obsługa funkcji wdrażalnych

Użyj jednej z tych metod, aby utworzyć funkcję wdrażalną Python :

Tworzenie wdrażalnych funkcji za pośrednictwem interfejsu REST API

W przypadku interfejsów REST API, ponieważ funkcja Python jest przesyłana bezpośrednio przez plik, plik musi już zawierać funkcję score . Każdy import jednorazowy, który musi zostać użyty do późniejszego użycia w ramach funkcji score , może być wykonany w zasięgu globalnym pliku. Gdy ten plik jest wdrażany jako funkcja Python , jednorazowy import dostępny w zasięgu globalnym jest wykonywany podczas wdrażania, a następnie po prostu ponownie wykorzystuje się przy każdym żądaniu predykcji.

Ważne:

Archiwum funkcji musi być plikiem .gz .

Przykładowy plik funkcji score :

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

Przykładowa funkcja score z jednym importem czasu:

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__]]}]}

Tworzenie wdrażalnych funkcji za pośrednictwem klienta Python

Aby utrwalić funkcję Python jako zasób aplikacyjny, klient Python korzysta z metody wml_client.repository.store_function . Można to zrobić na dwa sposoby:

Utrwalanie funkcji przy użyciu pliku zawierającego funkcję Python

Ta metoda jest taka sama, jak utrwalanie pliku funkcji Python za pomocą interfejsów REST API (score musi być zdefiniowany w zasięgu pliku źródłowego Python ). Szczegółowe informacje na ten temat zawiera sekcja Tworzenie wdrażalnych funkcji za pomocą interfejsu API usług REST.

Ważne:

Gdy wywoływana jest metoda wml_client.repository.store_function , należy przekazać nazwę pliku jako pierwszy argument.

Utrwalanie funkcji przez obiekt funkcji

Obiekty funkcji Python można utrwalić, tworząc Python Closures with a zagnieżdżoną funkcję o nazwie score. Funkcja score jest zwracana przez funkcję zewnętrzną, która jest zapisywana jako obiekt funkcji, gdy jest wywoływana. Ta funkcja score musi spełniać wymagania wymienione w sekcji Ogólne wymagania dla funkcji wdrażalnych. W takim przypadku w zewnętrznej funkcji zagnieżdżonej należy dodać jeden importy czasu i początkową logikę konfiguracji, tak aby były wykonywane podczas wdrażania i były używane w funkcji score . Każda powtarzająca się logika wymagana podczas żądania prediction musi zostać dodana w obrębie zagnieżdżonej funkcji score .

Przykładowa funkcja Python składuje się za pomocą klienta 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)

W tym scenariuszu funkcja Python podejmuje zadanie tworzenia pliku Python , który zawiera funkcję score i utrwala plik funkcji jako zasób aplikacyjny w repozytorium Watson Machine Learning :

score = my_deployable_function()

Więcej inform.

Temat nadrzędny: Wdrażanie funkcji Python

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