Python Betiği bileşenini yürütme
Bu makalede, Azure Machine Learning tasarımcısında Python Betiği Yürütme bileşeni açıklanmaktadır.
Python kodunu çalıştırmak için bu bileşeni kullanın. Python'ın mimarisi ve tasarım ilkeleri hakkında daha fazla bilgi için bkz. Azure Machine Learning tasarımcısında Python kodunu çalıştırma.
Python ile mevcut bileşenlerin desteklemediği görevleri gerçekleştirebilirsiniz, örneğin:
- kullanarak
matplotlib
verileri görselleştirme. - Çalışma alanınızdaki veri kümelerini ve modelleri listelemek için Python kitaplıklarını kullanma.
- Verileri İçeri Aktar bileşeninin desteklemediği kaynaklardan verileri okuma, yükleme ve işleme.
- Kendi derin öğrenme kodunuzu çalıştırın.
Desteklenen Python paketleri
Azure Machine Learning, veri işlemeye yönelik birçok yaygın yardımcı program içeren Python Anaconda dağıtımını kullanır. Anaconda sürümünü otomatik olarak güncelleştireceğiz. Geçerli sürüm:
- Python 3.6 için Anaconda 4.5+ dağıtımı
Tam liste için Önceden yüklenmiş Python paketleri bölümüne bakın.
Önceden yüklenmiş listede olmayan paketleri (örneğin, scikit-misc) yüklemek için betiğinize aşağıdaki kodu ekleyin:
import os
os.system(f"pip install scikit-misc")
Özellikle çıkarım amacıyla daha iyi performans için paketleri yüklemek için aşağıdaki kodu kullanın:
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")
Not
İşlem hattınız önceden yüklenmiş listede olmayan paketlere ihtiyaç duyan birden çok Python Betiği Yürütme bileşeni içeriyorsa, paketleri her bileşene yükleyin.
Uyarı
Excute Python Betiği bileşeni Java, PyODBC vb. gibi "apt-get" gibi komutlarla fazladan yerel kitaplıklara bağımlı paketlerin yüklenmesini desteklemez. Bunun nedeni, bu bileşenin yalnızca Python önceden yüklenmiş ve yönetici olmayan izinlere sahip basit bir ortamda yürütülmesidir.
Geçerli çalışma alanına ve kayıtlı veri kümelerine erişim
Çalışma alanınızdaki kayıtlı veri kümelerine erişmek için aşağıdaki örnek koda başvurabilirsiniz:
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,
Dosyaları karşıya yükleme
Python Betiği Yürüt bileşeni , Azure Machine Learning Python SDK'sını kullanarak dosyaların karşıya yüklenmesini destekler.
Aşağıdaki örnekte Python Betiği Yürüt bileşeninde bir görüntü dosyasının nasıl karşıya yüklendiği gösterilmektedir:
# 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,
İşlem hattı çalıştırması tamamlandıktan sonra, bileşenin sağ panelinde resmin önizlemesini görüntüleyebilirsiniz.
Aşağıdaki kodu kullanarak dosyayı herhangi bir veri deposuna da yükleyebilirsiniz. Dosyanın önizlemesini yalnızca depolama hesabınızda görebilirsiniz.
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,
Python Betiğini Yürütmeyi yapılandırma
Python Betiği Yürüt bileşeni, başlangıç noktası olarak kullanabileceğiniz örnek Python kodu içerir. Python Betiği Yürüt bileşenini yapılandırmak için Python betiği metin kutusunda çalıştırılacak bir dizi giriş ve Python kodu sağlayın.
python betiği yürüt bileşenini işlem hattınıza ekleyin.
Giriş için kullanmak istediğiniz tasarımcı veri kümelerini Dataset1'e ekleyin ve bağlayın. Python betiğinizde bu veri kümesine DataFrame1 olarak başvurun.
Veri kümesinin kullanımı isteğe bağlıdır. Python kullanarak veri oluşturmak istiyorsanız bunu kullanın veya python kodunu kullanarak verileri doğrudan bileşene aktarın.
Bu bileşen , Dataset2'ye ikinci bir veri kümesinin eklenmesini destekler. Python betiğinizdeki ikinci veri kümesine DataFrame2 olarak başvurun.
Azure Machine Learning'de depolanan veri kümeleri, bu bileşenle birlikte yüklendiğinde otomatik olarak pandas veri çerçevelerine dönüştürülür.
Yeni Python paketleri veya kodu eklemek için bu özel kaynakları içeren sıkıştırılmış dosyayı Betik paketi bağlantı noktasına bağlayın. Betiğiniz 16 KB'tan büyükse, CommandLine'ın 16597 karakter sınırını aşması gibi hataları önlemek için Betik Paketi bağlantı noktasını kullanın.
- Betiği ve diğer özel kaynakları zip dosyası olarak paketleyin.
- Zip dosyasını Dosya Veri Kümesi olarak stüdyoya yükleyin.
- Veri kümesi bileşenini tasarımcı yazma sayfasının sol bileşen bölmesindeki Veri Kümeleri listesinden sürükleyin.
- Veri kümesi bileşenini Python Betiği Yürütme bileşeninin Betik Paketi bağlantı noktasına bağlayın.
Karşıya yüklenen sıkıştırılmış arşivde bulunan tüm dosyalar işlem hattı yürütmesi sırasında kullanılabilir. Arşiv bir dizin yapısı içeriyorsa, yapı korunur.
Önemli
Bazı yaygın sözcükler (,
test
app
vb.) yerleşik hizmetler için ayrıldığından lütfen betik paketindeki dosyalar için benzersiz ve anlamlı ad kullanın.Python betik dosyası ve txt dosyası içeren bir betik paketi örneği aşağıda verilmiştir:
içeriği aşağıdadır
my_script.py
:def my_func(dataframe1): return dataframe1
Aşağıda betik paketindeki dosyaların nasıl tüketilir gösteren örnek kod verilmiştir:
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]])
Python betiği metin kutusuna geçerli Python betiğini yazın veya yapıştırın.
Not
Betiğinizi yazarken dikkatli olun. Bildirilmeyen değişkenleri veya içeri aktarılmamış bileşenleri veya işlevleri kullanma gibi söz dizimi hataları olmadığından emin olun. Önceden yüklenmiş bileşen listesine fazla dikkat edin. Listelenmeyen bileşenleri içeri aktarmak için betiğinize karşılık gelen paketleri yükleyin, örneğin:
import os os.system(f"pip install scikit-misc")
Python betiği metin kutusu, açıklamalarda bazı yönergeler ve veri erişimi ve çıkışı için örnek kod ile önceden doldurulur. Bu kodu düzenlemeniz veya değiştirmeniz gerekir. Girintileme ve büyük/küçük harf takibi için Python kurallarını izleyin:
- Betik, bu bileşenin giriş noktası olarak adlandırılan
azureml_main
bir işlev içermelidir. - Giriş noktası işlevinin, betiğinizde bu bağımsız değişkenler
Param<dataframe1>
Param<dataframe2>
kullanılmasa bile ve olmak üzere iki giriş bağımsız değişkeni olmalıdır. - Üçüncü giriş bağlantı noktasına bağlı sıkıştırılmış dosyalar, python'a
sys.path
da eklenen dizininde.\Script Bundle
sıkıştırılmış ve depolanır.
.zip dosyanız içeriyorsa
mymodule.py
, kullanarakimport mymodule
içeri aktar.Tasarımcıya iki veri kümesi döndürülebilir ve bu da türünde
pandas.DataFrame
bir dizi olmalıdır. Python kodunuzda başka çıkışlar oluşturabilir ve bunları doğrudan Azure depolama alanına yazabilirsiniz.Uyarı
Python Betiği Yürüt bileşenindeki bir Veritabanına veya diğer dış depolama birimlerine bağlanmak önerilmez. Veri İçeri Aktarma bileşenini ve Verileri Dışarı Aktar bileşenini kullanabilirsiniz
- Betik, bu bileşenin giriş noktası olarak adlandırılan
İşlem hattını gönderin.
Bileşen tamamlandıysa, çıktıyı beklendiği gibi denetleyin.
Bileşen başarısız olursa bazı sorun giderme adımları uygulamanız gerekir. Bileşeni seçin ve sağ bölmede Outputs+logs tuşlarını açın. 70_driver_log.txt açın ve azureml_main'da arama yapın, ardından hataya hangi satırın neden olduğunu bulabilirsiniz. Örneğin, "Dosya "/tmp/tmp01_ID/user_script.py", satır 17, azureml_main", hatanın Python betiğinizin 17 satırında oluştuğuna işaret eder.
Sonuçlar
Katıştırılmış Python kodu tarafından gerçekleştirilen tüm hesaplamaların sonuçları olarak sağlanmalıdır pandas.DataFrame
ve bu da otomatik olarak Azure Machine Learning veri kümesi biçimine dönüştürülür. Ardından sonuçları işlem hattındaki diğer bileşenlerle kullanabilirsiniz.
Bileşen iki veri kümesi döndürür:
Sonuçlar Python betiğinde ilk döndürülen pandas veri çerçevesi tarafından tanımlanan Veri Kümesi 1.
Python betiğinde ikinci döndürülen pandas veri çerçevesi tarafından tanımlanan Sonuç Veri Kümesi 2.
Önceden yüklenmiş Python paketleri
Önceden yüklenmiş paketler şunlardır:
- 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
- şifreleme==2.8
- cycler==0.10.0
- dill==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
- dengesiz-öğrenme==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
- altı==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
Sonraki adımlar
Azure Machine Learning'in kullanabileceği bileşenler kümesine bakın.