Wykonywanie składnika skryptu języka Python
W tym artykule opisano składnik Execute Python Script w projektancie usługi Azure Machine Learning.
Użyj tego składnika, aby uruchomić kod języka Python. Aby uzyskać więcej informacji na temat architektury i zasad projektowania języka Python, zobacz , jak uruchamiać kod języka Python w projektancie usługi Azure Machine Learning.
Za pomocą języka Python można wykonywać zadania, które nie są obsługiwane przez istniejące składniki, takie jak:
- Wizualizowanie danych przy użyciu polecenia
matplotlib
. - Wyliczanie zestawów danych i modeli w obszarze roboczym przy użyciu bibliotek języka Python.
- Odczytywanie, ładowanie i manipulowanie danymi ze źródeł, których składnik Import Data nie obsługuje.
- Uruchamianie własnego kodu uczenia głębokiego.
Obsługiwane pakiety języka Python
Usługa Azure Machine Learning korzysta z dystrybucji Anaconda języka Python, która obejmuje wiele typowych narzędzi do przetwarzania danych. Automatycznie zaktualizujemy wersję środowiska Anaconda. Bieżąca wersja to:
- Dystrybucja anaconda 4.5+ dla języka Python 3.6
Aby uzyskać pełną listę, zobacz sekcję Preinstalled Python packages (Preinstalowane pakiety języka Python).
Aby zainstalować pakiety, które nie znajdują się na liście preinstalowanej (na przykład scikit-misc), dodaj następujący kod do skryptu:
import os
os.system(f"pip install scikit-misc")
Użyj następującego kodu, aby zainstalować pakiety w celu uzyskania lepszej wydajności, szczególnie w przypadku wnioskowania:
import importlib.util
package_name = 'scikit-misc'
spec = importlib.util.find_spec(package_name)
if spec is None:
import os
os.system(f"pip install scikit-misc")
Uwaga
Jeśli potok zawiera wiele składników Execute Python Script, które wymagają pakietów, które nie znajdują się na liście preinstalowanej, zainstaluj pakiety w każdym składniku.
Ostrzeżenie
Składnik Excute Python Script nie obsługuje instalowania pakietów, które są zależne od dodatkowych bibliotek natywnych z poleceniem takim jak "apt-get", takim jak Java, PyODBC itp. Jest to spowodowane tym, że ten składnik jest wykonywany w prostym środowisku ze wstępnie zainstalowanym językiem Python i z uprawnieniami innych niż administrator.
Dostęp do bieżącego obszaru roboczego i zarejestrowanych zestawów danych
Aby uzyskać dostęp do zarejestrowanych zestawów danych w obszarze roboczym, możesz odwołać się do następującego przykładowego kodu:
def azureml_main(dataframe1 = None, dataframe2 = None):
# Execution logic goes here
print(f'Input pandas.DataFrame #1: {dataframe1}')
from azureml.core import Run
run = Run.get_context(allow_offline=True)
#access to current workspace
ws = run.experiment.workspace
#access to registered dataset of current workspace
from azureml.core import Dataset
dataset = Dataset.get_by_name(ws, name='test-register-tabular-in-designer')
dataframe1 = dataset.to_pandas_dataframe()
# If a zip file is connected to the third input port,
# it is unzipped under "./Script Bundle". This directory is added
# to sys.path. Therefore, if your zip file contains a Python file
# mymodule.py you can import it using:
# import mymodule
# Return value must be of a sequence of pandas.DataFrame
# E.g.
# - Single return value: return dataframe1,
# - Two return values: return dataframe1, dataframe2
return dataframe1,
Przekazywanie plików
Składnik Execute Python Script (Wykonywanie skryptu języka Python) obsługuje przekazywanie plików przy użyciu zestawu SDK języka Python usługi Azure Machine Learning.
W poniższym przykładzie pokazano, jak przekazać plik obrazu w składniku Execute Python Script (Wykonywanie skryptu języka Python):
# The script MUST contain a function named azureml_main,
# which is the entry point for this component.
# Imports up here can be used to
import pandas as pd
# The entry point function must have two input arguments:
# Param<dataframe1>: a pandas.DataFrame
# Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):
# Execution logic goes here
print(f'Input pandas.DataFrame #1: {dataframe1}')
from matplotlib import pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
img_file = "line.png"
plt.savefig(img_file)
from azureml.core import Run
run = Run.get_context(allow_offline=True)
run.upload_file(f"graphics/{img_file}", img_file)
# Return value must be of a sequence of pandas.DataFrame
# For example:
# - Single return value: return dataframe1,
# - Two return values: return dataframe1, dataframe2
return dataframe1,
Po zakończeniu przebiegu potoku możesz wyświetlić podgląd obrazu w prawym panelu składnika.
Możesz również przekazać plik do dowolnego magazynu danych przy użyciu następującego kodu. Podgląd pliku można wyświetlić tylko na koncie magazynu.
import pandas as pd
# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be None.
# Param<dataframe1>: a pandas.DataFrame
# Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):
# Execution logic goes here
print(f'Input pandas.DataFrame #1: {dataframe1}')
from matplotlib import pyplot as plt
import os
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
img_file = "line.png"
# Set path
path = "./img_folder"
os.mkdir(path)
plt.savefig(os.path.join(path,img_file))
# Get current workspace
from azureml.core import Run
run = Run.get_context(allow_offline=True)
ws = run.experiment.workspace
# Get a named datastore from the current workspace and upload to specified path
from azureml.core import Datastore
datastore = Datastore.get(ws, datastore_name='workspacefilestore')
datastore.upload(path)
return dataframe1,
Jak skonfigurować wykonywanie skryptu języka Python
Składnik Execute Python Script (Wykonywanie skryptu języka Python) zawiera przykładowy kod języka Python, którego można użyć jako punktu początkowego. Aby skonfigurować składnik Execute Python Script (Wykonywanie skryptu języka Python), podaj zestaw danych wejściowych i kod języka Python do uruchomienia w polu tekstowym skryptu języka Python .
Dodaj składnik Execute Python Script (Wykonywanie skryptu języka Python ) do potoku.
Dodaj zestaw danych Dataset1 i nawiąż połączenie z nimi wszystkie zestawy danych z projektanta, których chcesz użyć do wprowadzania danych. Odwoływanie się do tego zestawu danych w skryscie języka Python jako elementu DataFrame1.
Użycie zestawu danych jest opcjonalne. Użyj go, jeśli chcesz wygenerować dane przy użyciu języka Python lub użyć kodu języka Python do zaimportowania danych bezpośrednio do składnika.
Ten składnik obsługuje dodanie drugiego zestawu danych w zestawie danych Dataset2. Odwoływanie się do drugiego zestawu danych w skryscie języka Python jako elementu DataFrame2.
Zestawy danych przechowywane w usłudze Azure Machine Learning są automatycznie konwertowane na ramki danych biblioteki pandas podczas ładowania z tym składnikiem.
Aby dołączyć nowe pakiety języka Python lub kod, połącz spakowany plik zawierający te zasoby niestandardowe z portem pakietu skryptu . Jeśli skrypt jest większy niż 16 KB, użyj portu pakietu skryptów , aby uniknąć błędów, takich jak wiersz polecenia przekracza limit 16597 znaków.
- Spakuj skrypt i inne zasoby niestandardowe do pliku zip.
- Przekaż plik zip jako zestaw danych plików do studia.
- Przeciągnij składnik zestawu danych z listy Zestawy danych w okienku składników po lewej stronie na stronie tworzenia projektanta.
- Połącz składnik zestawu danych z portem pakietu skryptów składnika Wykonaj skrypt języka Python .
Podczas wykonywania potoku można użyć dowolnego pliku zawartego w przekazanym archiwum zip. Jeśli archiwum zawiera strukturę katalogów, struktura zostanie zachowana.
Ważne
Użyj unikatowej i znaczącej nazwy plików w pakiecie skryptów, ponieważ niektóre typowe słowa (takie jak
test
,app
itp.) są zarezerwowane dla wbudowanych usług.Poniżej znajduje się przykład pakietu skryptów, który zawiera plik skryptu języka Python i plik txt:
Poniżej znajduje się zawartość elementu
my_script.py
:def my_func(dataframe1): return dataframe1
Poniżej przedstawiono przykładowy kod pokazujący sposób korzystania z plików w pakiecie skryptów:
import pandas as pd from my_script import my_func def azureml_main(dataframe1 = None, dataframe2 = None): # Execution logic goes here print(f'Input pandas.DataFrame #1: {dataframe1}') # Test the custom defined Python function dataframe1 = my_func(dataframe1) # Test to read custom uploaded files by relative path with open('./Script Bundle/my_sample.txt', 'r') as text_file: sample = text_file.read() return dataframe1, pd.DataFrame(columns=["Sample"], data=[[sample]])
W polu tekstowym Skrypt języka Python wpisz lub wklej prawidłowy skrypt języka Python.
Uwaga
Podczas pisania skryptu należy zachować ostrożność. Upewnij się, że nie ma żadnych błędów składniowych, takich jak używanie niezdecydowanych zmiennych lub nieimportowanych składników lub funkcji. Zwróć szczególną uwagę na listę wstępnie zainstalowanych składników. Aby zaimportować składniki, których nie ma na liście, zainstaluj odpowiednie pakiety w skry skrycie, takie jak:
import os os.system(f"pip install scikit-misc")
Pole tekstowe skryptu języka Python jest wstępnie wypełniane instrukcjami w komentarzach i przykładowym kodem na potrzeby dostępu do danych i danych wyjściowych. Musisz edytować lub zastąpić ten kod. Postępuj zgodnie z konwencjami języka Python dotyczącymi wcięcia i wielkości liter:
- Skrypt musi zawierać funkcję o nazwie
azureml_main
jako punkt wejścia dla tego składnika. - Funkcja punktu wejścia musi mieć dwa argumenty wejściowe, a
Param<dataframe2>
nawet wtedy,Param<dataframe1>
gdy te argumenty nie są używane w skrycie. - Spakowane pliki połączone z trzecim portem wejściowym są rozpakowane i przechowywane w katalogu
.\Script Bundle
, który jest również dodawany do języka Pythonsys.path
.
Jeśli plik .zip zawiera
mymodule.py
plik , zaimportuj go przy użyciu poleceniaimport mymodule
.Do projektanta można zwrócić dwa zestawy danych, które muszą być sekwencją typu
pandas.DataFrame
. Możesz tworzyć inne dane wyjściowe w kodzie języka Python i zapisywać je bezpośrednio w usłudze Azure Storage.Ostrzeżenie
Nie zaleca się nawiązywania połączenia z bazą danych lub innymi magazynami zewnętrznymi w składniku Wykonywanie skryptu języka Python. Możesz użyć składnika Importuj dane i składnika Eksportuj dane
- Skrypt musi zawierać funkcję o nazwie
Prześlij potok.
Jeśli składnik zostanie ukończony, sprawdź dane wyjściowe, jeśli są zgodnie z oczekiwaniami.
Jeśli składnik nie powiedzie się, należy wykonać pewne kroki rozwiązywania problemów. Wybierz składnik i otwórz pozycję Dane wyjściowe i dzienniki w okienku po prawej stronie. Otwórz 70_driver_log.txt i wyszukaj w azureml_main, a następnie możesz znaleźć, który wiersz spowodował błąd. Na przykład "Plik "/tmp/tmp01_ID/user_script.py", wiersz 17 w azureml_main" wskazuje, że błąd wystąpił w wierszu 17 skryptu języka Python.
Wyniki
Wyniki wszystkich obliczeń za pomocą osadzonego kodu w języku Python muszą być podane jako pandas.DataFrame
, który jest automatycznie konwertowany na format zestawu danych usługi Azure Machine Learning. Następnie możesz użyć wyników z innymi składnikami w potoku.
Składnik zwraca dwa zestawy danych:
Zestaw danych wyników 1 zdefiniowany przez pierwszą zwróconą ramkę danych biblioteki pandas w skryscie języka Python.
Result Dataset 2 ( Zestaw danych 2) zdefiniowany przez drugą zwróconą ramkę danych biblioteki pandas w skryscie języka Python.
Wstępnie zainstalowane pakiety języka Python
Wstępnie zainstalowane pakiety to:
- adal==1.2.2
- applicationinsights==0.11.9
- attrs==19.3.0
- azure-common==1.1.25
- azure-core==1.3.0
- azure-graphrbac==0.61.1
- azure-identity==1.3.0
- azure-mgmt-authorization==0.60.0
- azure-mgmt-containerregistry==2.8.0
- azure-mgmt-keyvault==2.2.0
- azure-mgmt-resource==8.0.1
- azure-mgmt-storage==8.0.0
- azure-storage-blob==1.5.0
- azure-storage-common==1.4.2
- azureml-core==1.1.5.5
- azureml-dataprep-native==14.1.0
- azureml-dataprep==1.3.5
- azureml-defaults==1.1.5.1
- azureml-designer-classic-modules==0.0.118
- azureml-designer-core==0.0.31
- azureml-designer-internal==0.0.18
- azureml-model-management-sdk==1.0.1b6.post1
- azureml-pipeline-core==1.1.5
- azureml-telemetry==1.1.5.3
- backports.tempfile==1.0
- backports.weakref==1.0.post1
- boto3==1.12.29
- botocore==1.15.29
- cachetools==4.0.0
- certifi==2019.11.28
- cffi==1.12.3
- chardet==3.0.4
- click==7.1.1
- cloudpickle==1.3.0
- configparser==3.7.4
- contextlib2==0.6.0.post1
- Kryptografia==2.8
- cycler==0.10.0
- koper==0.3.1.1
- distro==1.4.0
- docker==4.2.0
- docutils==0.15.2
- dotnetcore2==2.1.13
- flask==1.0.3
- fusepy==3.0.1
- gensim==3.8.1
- google-api-core==1.16.0
- google-auth==1.12.0
- google-cloud-core==1.3.0
- google-cloud-storage==1.26.0
- google-resumable-media==0.5.0
- googleapis-common-protos==1.51.0
- gunicorn==19.9.0
- idna==2.9
- niezrównoważony-learn==0.4.3
- isodate==0.6.0
- itsdangerous==1.1.0
- jeepney==0.4.3
- jinja2==2.11.1
- jmespath==0.9.5
- joblib==0.14.0
- json-logging-py==0.2
- jsonpickle==1.3
- jsonschema==3.0.1
- kiwisolver==1.1.0
- liac-arff==2.4.0
- lightgbm==2.2.3
- markupsafe==1.1.1
- matplotlib==3.1.3
- more-itertools==6.0.0
- msal-extensions==0.1.3
- msal==1.1.0
- msrest==0.6.11
- msrestazure==0.6.3
- ndg-httpsclient==0.5.1
- nimbusml==1.6.1
- numpy==1.18.2
- oauthlib==3.1.0
- pandas==0.25.3
- pathspec==0.7.0
- pip==20.0.2
- portalocker==1.6.0
- protobuf==3.11.3
- pyarrow==0.16.0
- pyasn1-modules==0.2.8
- pyasn1==0.4.8
- pycparser==2.20
- pycryptodomex==3.7.3
- pyjwt==1.7.1
- pyopenssl==19.1.0
- pyparsing==2.4.6
- pyrsistent==0.16.0
- python-dateutil==2.8.1
- pytz==2019.3
- requests-oauthlib==1.3.0
- requests==2.23.0
- rsa==4.0
- ruamel.yaml==0.15.89
- s3transfer==0.3.3
- scikit-learn==0.22.2
- scipy==1.4.1
- secretstorage==3.1.2
- setuptools==46.1.1.post20200323
- six==1.14.0
- smart-open==1.10.0
- urllib3==1.25.8
- websocket-client==0.57.0
- werkzeug==0.16.1
- wheel==0.34.2
Następne kroki
Zobacz zestaw składników dostępnych dla usługi Azure Machine Learning.