Betanítási feladatok konfigurálása és elküldése

ÉRVÉNYES:Python SDK azureml v1

Ebben a cikkben megtudhatja, hogyan konfigurálhatja és küldheti el az Azure Machine-Tanulás feladatokat a modellek betanítása érdekében. A kódrészletek bemutatják a betanítási szkriptek konfigurálásának és beküldésének legfontosabb részeit. Ezután a példajegyzetfüzetek egyikével keresse meg a teljes körű munka példákat.

Betanításkor gyakori, hogy a helyi számítógépen indul el, majd később felskálázható egy felhőalapú fürtre. Az Azure Machine Tanulás segítségével a szkriptet különböző számítási célokon futtathatja anélkül, hogy módosítania kellene a betanítási szkriptet.

Mindössze annyit kell tennie, hogy definiálja a környezetet az egyes számítási célokhoz egy szkriptfeladat-konfigurációban. Ezután, ha egy másik számítási célon szeretné futtatni a betanítási kísérletet, adja meg az adott számítás feladatkonfigurációját.

Előfeltételek

Mi az a szkriptfuttatási konfiguráció?

A ScriptRunConfig a betanítási feladatok kísérlet részeként történő beküldéséhez szükséges információk konfigurálására szolgál.

A betanítási kísérletet egy ScriptRunConfig objektummal küldi el. Ez az objektum a következőket tartalmazza:

  • source_directory: A betanítási szkriptet tartalmazó forráskönyvtár
  • szkript: A futtatandó betanítási szkript
  • compute_target: A futtatandó számítási cél
  • környezet: A szkript futtatásakor használni kívánt környezet
  • és néhány további konfigurálható lehetőség (további információkért tekintse meg a referenciadokumentációt )

Saját modell betanítása

A betanítási feladat elküldéséhez használt kódminta minden számítási céltípus esetében megegyezik:

  1. Kísérlet létrehozása futtatáshoz
  2. Környezet létrehozása, ahol a szkript fut
  3. Hozzon létre egy ScriptRunConfigot, amely megadja a számítási célt és a környezetet
  4. Feladat küldése
  5. Várakozás a feladat befejeződésére

Vagy a következőt teheti:

  • HyperDrive-futtatás elküldése hiperparaméter-finomhangoláshoz.
  • Küldjön be egy kísérletet a VS Code bővítményen keresztül.

Kísérlet létrehozása

Hozzon létre egy kísérletet a munkaterületen. A kísérlet egy könnyű tároló, amely segít a feladatbeküldések rendszerezésében és a kód nyomon követésében.

ÉRVÉNYES:Python SDK azureml v1

from azureml.core import Experiment

experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)

Számítási cél kiválasztása

Válassza ki azt a számítási célt, amelyen a betanítási szkript futni fog. Ha nincs megadva számítási cél a ScriptRunConfigban, vagy ha, az compute_target='local'Azure Machine Tanulás helyileg fogja végrehajtani a szkriptet.

A cikkben szereplő példakód feltételezi, hogy már létrehozott egy számítási célt my_compute_target az "Előfeltételek" szakaszból.

Feljegyzés

  • Az Azure Databricks nem támogatott számítási célként a modell betanításához. Az Azure Databrickset adat-előkészítési és üzembehelyezési feladatokhoz használhatja.
  • Az Azure Arc-kompatibilis Kubernetes-fürtre vonatkozó betanítási számítási cél létrehozásához és csatolásához tekintse meg az Azure Arc-kompatibilis gépek Tanulás

Környezet létrehozása

Az Azure Machine Tanulás környezetek annak a környezetnek a beágyazása, ahol a gépi tanulási betanítás történik. Megadják a Python-csomagokat, a Docker-rendszerképet, a környezeti változókat és a szoftverbeállításokat a betanítási és pontozási szkriptek köré. Futtatókörnyezeteket is meghatároznak (Python, Spark vagy Docker).

Meghatározhatja a saját környezetét, vagy használhat egy Azure Machine Tanulás válogatott környezetet. A válogatott környezetek előre definiált környezetek, amelyek alapértelmezés szerint elérhetők a munkaterületen. Ezeket a környezeteket gyorsítótárazott Docker-rendszerképek készítik, amelyek csökkentik a feladatok előkészítésének költségeit. Az elérhető válogatott környezetek teljes listáját az Azure Machine Tanulás Válogatott környezetek című témakörben találja.

Távoli számítási cél esetén az alábbi népszerű válogatott környezetek egyikével kezdheti a következőket:

ÉRVÉNYES:Python SDK azureml v1

from azureml.core import Workspace, Environment

ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")

A környezetekkel kapcsolatos további információkért és részletekért lásd: Create &use software environments in Azure Machine Tanulás.

Helyi számítási cél

Ha a számítási cél a helyi gép, önnek kell gondoskodnia arról, hogy az összes szükséges csomag elérhető legyen abban a Python-környezetben, ahol a szkript fut. Az aktuális Python-környezet (vagy a megadott elérési úton lévő Python) használatára használható python.user_managed_dependencies .

ÉRVÉNYES:Python SDK azureml v1

from azureml.core import Environment

myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True

# You can choose a specific Python environment by pointing to a Python path 
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'

A szkriptfeladat konfigurációjának létrehozása

Most, hogy rendelkezik számítási céllal (my_compute_targetlásd : Előfeltételek és környezet (myenvlásd : Környezet létrehozása), hozzon létre egy szkriptfeladat-konfigurációt, amely a címtárban található betanítási szkriptet (train.py) futtatja project_folder :

ÉRVÉNYES:Python SDK azureml v1

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='train.py',
                      compute_target=my_compute_target,
                      environment=myenv)

Ha nem ad meg környezetet, a rendszer létrehoz egy alapértelmezett környezetet.

Ha parancssori argumentumokat szeretne átadni a betanítási szkriptnek, megadhatja őket a ScriptRunConfig konstruktor paraméterén keresztül arguments , például arguments=['--arg1', arg1_val, '--arg2', arg2_val].

Ha felül szeretné bírálni a feladathoz engedélyezett alapértelmezett maximális időt, ezt a max_run_duration_seconds paraméteren keresztül teheti meg. A rendszer megpróbálja automatikusan megszakítani a feladatot, ha ennél az értéknél tovább tart.

Elosztott feladat konfigurációjának megadása

Ha elosztott betanítási feladatot szeretne futtatni, adja meg az elosztott feladatspecifikus konfigurációt a distributed_job_config paraméternek. A támogatott konfigurációtípusok közé tartozik az MpiConfiguration, a TensorflowConfiguration és a PyTorchConfiguration.

Az elosztott Horovod-, TensorFlow- és PyTorch-feladatok futtatásával kapcsolatos további információkért és példákért lásd:

A kísérlet elküldése

ÉRVÉNYES:Python SDK azureml v1

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

Fontos

A betanítási feladat elküldésekor a rendszer létrehoz egy pillanatképet a betanítási szkripteket tartalmazó könyvtárról, és elküldi a számítási célnak. A rendszer a kísérlet részeként is tárolja a munkaterületen. Ha módosítja a fájlokat, és újra elküldi a feladatot, csak a módosított fájlok lesznek feltöltve.

Ha meg szeretné akadályozni, hogy a szükségtelen fájlok bekerüljenek a pillanatképbe, hozzon létre egy figyelmen kívül hagyott fájlt (.gitignore vagy .amlignore) a könyvtárban. Adja hozzá a kizárni kívánt fájlokat és könyvtárakat ehhez a fájlhoz. A fájlban használandó szintaxissal kapcsolatos további információkért lásd a szintaxist és a minták helyét .gitignore. A .amlignore fájl ugyanazt a szintaxist használja. Ha mindkét fájl létezik, a rendszer a .amlignore fájlt használja, és a .gitignore fájl nincs használatban.

A pillanatképekről további információt a Pillanatképek című témakörben talál.

Fontos

Speciális mappák Két mappa, kimenetek és naplók, speciális kezelést kapnak az Azure Machine Tanulás. A betanítás során, amikor fájlokat ír a gyökérkönyvtárhoz (és más néven a gyökérkönyvtárhoz) kapcsolódó mappákba , a fájlok automatikusan feltöltődnek a feladatelőzményekbe, így a feladat befejezése után hozzáférhet hozzájuk../logs./outputs

Ha a betanítás során összetevőket (például modellfájlokat, ellenőrzőpontokat, adatfájlokat vagy ábrázolt képeket) szeretne létrehozni, írja be ezeket a ./outputs mappába.

Hasonlóképpen bármilyen naplót írhat a betanítási feladatból a ./logs mappába. Az Azure Machine Tanulás TensorBoard-integrációjának használatához ügyeljen arra, hogy a TensorBoard-naplókat ebbe a mappába írja. Amíg a feladat folyamatban van, elindíthatja a TensorBoardot, és streamelheti ezeket a naplókat. Később bármely korábbi feladat naplóit is visszaállíthatja.

Például a távoli betanítási feladat után töltse le a kimeneti mappába írt fájlt a helyi gépre: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Git nyomon követése és integrációja

Amikor elindít egy betanítási feladatot, amelyben a forráskönyvtár egy helyi Git-adattár, a rendszer a feladatelőzményekben tárolja az adattár adatait. További információ: Git-integráció az Azure Machine-Tanulás.

Jegyzetfüzet-példák

Az alábbi jegyzetfüzetekben példákat talál a feladatok különböző betanítási forgatókönyvekhez való konfigurálására:

A szolgáltatás megismerése Jupyter-notebookok használatával cikk útmutatását követve megtanulhatja, hogyan futtathat notebookokat.

Hibaelhárítás

  • AttributeError: "RoundTripLoader" objektum nem rendelkezik "comment_handling" attribútummal: Ez a hiba a függőség új (0.17.5-ös) ruamel-yamlazureml-core verziójából származik, amely kompatibilitástörő változást azureml-coreeredményez. A hiba kijavítása érdekében távolítsa el az eltávolítást ruamel-yaml egy másik verzió futtatásával pip uninstall ruamel-yaml és telepítésével ruamel-yaml; a támogatott verziók a 0.15.35-ös verziótól a 0.17.4-es verzióig (a teljes verziót is beleértve). Ezt a parancs futtatásával pip install "ruamel-yaml>=0.15.35,<0.17.5"teheti meg.

  • A feladat a következővel meghiúsul jwt.exceptions.DecodeError: Pontos hibaüzenet: jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().

    Érdemes lehet frissíteni az azureml-core legújabb verziójára: pip install -U azureml-core.

    Ha. A helyi feladatok esetében a probléma megoldásához ellenőrizze, hogy a környezetben telepített PyJWT-verzió hol található. elkezdi a feladatokat. A PyJWT támogatott verziói a < 2.0.0. Távolítsa el a PyJWT-t a környezetből, ha a verzió >= 2.0.0. Az alábbiak szerint ellenőrizheti a PyJWT verzióját, eltávolíthatja és telepítheti a megfelelő verziót:

    1. Indítsa el a parancshéjat, aktiválja a Conda-környezetet, ahol az Azureml-Core telepítve van.
    2. Adja meg pip freeze és keresse meg PyJWTa 2.0.0-s verziót < , ha megtalálható
    3. Ha a felsorolt verzió nem támogatott verzió, pip uninstall PyJWT a parancshéjban adja meg az y értéket a megerősítéshez.
    4. Végezze el a telepítést a pip install 'PyJWT<2.0.0' paranccsal

    Ha. felhasználó által létrehozott környezetet küld a feladatával, fontolja meg az azureml-core legújabb verziójának használatát ebben a környezetben. Az azureml-core 1.18.0-s verziói >már rögzítik a PyJWT < 2.0.0-s verzióját. Ha az azureml-core < 1.18.0-s verzióját kell használnia a beküldött környezetben, mindenképpen adja meg a PyJWT < 2.0.0-s verzióját a pipfüggőségek között.

  • ModuleErrors (Nincs megnevezett modul): Ha. Az Azure Machine Tanulás kísérletek beküldése közben a ModuleErrors alkalmazásba fut, a betanítási szkript egy csomag telepítésére számít, de nincs hozzáadva. Miután megadta a csomag nevét, az Azure Machine Tanulás telepíti a csomagot a betanítási feladathoz használt környezetben.

    Ha. Kísérletek beküldéséhez az Estimatorst használja, a becslőben megadhat egy csomagnevet pip_packages vagy conda_packages paramétert annak alapján, hogy melyik forrásból szeretné telepíteni a csomagot. Megadhat egy yml-fájlt is, amely az összes függőségét tartalmazza conda_dependencies_file, vagy paraméterrel pip_requirements_file listázhatja az összes pipkövetelményt egy txt fájlban. Ha saját Azure Machine Tanulás Environment-objektummal rendelkezik, amelyet felül szeretne bírálni a becslő által használt alapértelmezett rendszerképen, ezt a environment környezetet a becslő konstruktor paraméterével adhatja meg.

    Az Azure Machine Tanulás karbantartott Docker-rendszerképek és azok tartalma az Azure Machine Tanulás-tárolókban tekinthető meg. A keretrendszerspecifikus függőségek a megfelelő keretrendszerdokumentációban találhatók:

    Feljegyzés

    Ha úgy gondolja, hogy egy adott csomag elég gyakori ahhoz, hogy hozzáadható legyen az Azure Machine-Tanulás karbantartott rendszerképekhez és környezetekhez, hozzon létre egy GitHub-problémát az Azure Machine Tanulás-tárolókban.

  • NameError (Name not defined), AttributeError (Az objektum nem rendelkezik attribútummal): Ez a kivétel a betanítási szkriptekből származik. A naplófájlokat az Azure Portalon tekintheti meg, ha további információt szeretne kapni a nem definiált névvel vagy attribútumhibával kapcsolatban. Az SDK-ból run.get_details() megtekintheti a hibaüzenetet. Ez a feladathoz létrehozott összes naplófájlt is listázni fogja. A feladat újbóli elküldése előtt ellenőrizze a betanítási szkriptet, és javítsa ki a hibát.

  • Feladat vagy kísérlet törlése: A kísérletek archiválhatók az Experiment.archive metódussal, vagy az Azure Machine Tanulás Studio-ügyfél Kísérlet lap nézetében az "Archív kísérlet" gombbal. Ez a művelet elrejti a kísérletet a listalekérdezések és nézetek elől, de nem törli.

    Az egyes kísérletek vagy feladatok végleges törlése jelenleg nem támogatott. A munkaterület-objektumok törléséről további információt a Gép Tanulás szolgáltatás-munkaterület adatainak exportálása vagy törlése című témakörben talál.

  • A metrikadokumentum túl nagy: az Azure Machine Tanulás belső korlátozásokkal rendelkezik a betanítási feladatból egyszerre naplózható metrikaobjektumok méretére vonatkozóan. Ha „a metrikadokumentum túl nagy” hibát észlel egy értéklistát tartalmazó metrika naplózásakor, próbálja meg felosztani a listát kisebb tömbökre, például:

    run.log_list("my metric name", my_metric[:N])
    run.log_list("my metric name", my_metric[N:])
    

    Az Azure Machine Tanulás belsőleg összefűzi az azonos metrikanévvel rendelkező blokkokat egy összefüggő listába.

  • A számítási cél létrehozása hosszú időt vesz igénybe: A számítási célok Docker-rendszerképei az Azure Container Registryből (ACR) töltődnek be. Alapértelmezés szerint az Azure Machine Tanulás létrehoz egy ACR-t, amely az alapszintű szolgáltatási szintet használja. Ha a munkaterület ACR-ét Standard vagy Prémium szintre módosítja, azzal csökkentheti a rendszerképek létrehozásához és betöltéséhez szükséges időt. További információ: az Azure Container Registry szolgáltatásszintjei.

Következő lépések