Megosztás a következőn keresztül:


A Python és a revoscalepy használata távolról futó modell létrehozásához az SQL Serveren

A következőkre vonatkozik: SQL Server 2017 (14.x) és újabb verziók

A Microsoft revoscalepy Python-kódtára adatelemzési algoritmusokat biztosít az adatfeltáráshoz, a vizualizációhoz, az átalakításokhoz és az elemzéshez. Ez a kódtár stratégiai jelentőséggel bír az SQL Server Python-integrációs forgatókönyveiben. Többmagos kiszolgálón a revoscalepy függvények párhuzamosan is futtathatók. Központi kiszolgálóval és ügyfél-munkaállomásokkal rendelkező elosztott architektúrában (különálló fizikai számítógépeken, amelyek mindegyike ugyanazzal a revoscalepy-kódtárral rendelkezik) helyileg indítható Python-kódot írhat, majd a végrehajtást egy távoli SQL Server-példányra osztja át, ahol az adatok találhatók.

A revoscalepy a következő Microsoft-termékekben és -disztribúciókban található:

Ez a gyakorlat bemutatja, hogyan hozhat létre lineáris regressziós modellt rx_lin_mod alapján, amely a számítási környezetet bemenetként elfogadó revoscalepy egyik algoritmusa. A gyakorlatban futtatandó kód helyiről távoli számítási környezetbe helyezi át a kódvégrehajtást, amelyet a távoli számítási környezetet engedélyező revoscalepy-függvények engedélyeznek.

Az oktatóanyag elvégzésével megtanulhatja, hogyan:

  • Lineáris modell létrehozása revoscalepy használatával
  • Műveletek áthelyezése helyiről távoli számítási környezetbe

Előfeltételek

A gyakorlatban használt mintaadatok a flightdata-adatbázis .

A cikkben szereplő mintakód futtatásához IDE-ra van szükség, és az IDE-nek a Python végrehajtható fájljához kell kapcsolódnia.

A számítási környezet váltásának gyakorlásához helyi munkaállomásra és SQL Server-adatbázismotor-példányra van szükség, amelyen engedélyezve van a Machine Learning Services és a Python.

Jótanács

Ha nincs két számítógépe, a megfelelő alkalmazások telepítésével szimulálhat távoli számítási környezetet egy fizikai számítógépen. Először is az SQL Server Machine Learning Services telepítése "távoli" példányként működik. Másodszor, a Python-ügyfélkódtárak telepítése ügyfélként működik. Ugyanazon a gépen két példánya lesz ugyanabból a Python-disztribúcióból és a Microsoft Python-kódtárakból. A gyakorlat sikeres elvégzéséhez nyomon kell követnek a fájl elérési útvonalakat és hogy a Python.exe melyik példányát használja.

Távoli számítási környezetek és revoscalepy

Ez a minta bemutatja a Python-modell távoli számítási környezetben való létrehozásának folyamatát, amely lehetővé teszi, hogy egy ügyfélről dolgozzon, de válasszon egy távoli környezetet, például az SQL Servert vagy a Sparkot, ahol a műveleteket ténylegesen végrehajtják. A távoli számítási környezet célja, hogy a számítást oda vigye, ahol az adatok találhatók.

A Python-kód SQL Serveren való végrehajtásához a revoscalepy csomag szükséges. Ez egy speciális Python-csomag, amelyet a Microsoft biztosít, hasonlóan az R-nyelv RevoScaleR csomaghoz. A revoscalepy csomag támogatja a számítási környezetek létrehozását, és biztosítja az adatok és modellek helyi munkaállomás és távoli kiszolgáló közötti továbbításához szükséges infrastruktúrát. Az adatbázison belüli kódvégrehajtást támogató revoscalepy függvény az RxInSqlServer.

Ebben a leckében SQL Server adataival betanít egy lineáris modellt a rx_lin_mod alapján, amely egy revoscalepy függvény, amely támogatja a regressziót nagyon nagy adathalmazokon.

Ez a lecke azt is bemutatja, hogyan állíthatja be és használhatja az SQL Server számítási környezetét a Pythonban.

A mintakód futtatása

Miután előkészítette az adatbázist, és egy táblában tárolta a betanításhoz szükséges adatokat, nyisson meg egy Python fejlesztői környezetet, és futtassa a kódmintát.

A kód a következő lépéseket hajtja végre:

  1. Importálja a szükséges kódtárakat és függvényeket.
  2. Kapcsolatot hoz létre az SQL Serverrel. Adatforrás-objektumokat hoz létre az adatok kezeléséhez.
  3. Átalakításokkal módosítja az adatokat, hogy a logisztikai regressziós algoritmus használhassa.
  4. Meghívja rx_lin_mod és meghatározza a modellnek megfelelő képletet.
  5. Előrejelzéseket hoz létre az eredeti adatok alapján.
  6. Az előrejelzett értékek alapján létrehoz egy összegzést.

Minden műveletet az SQL Server egy példányával hajtunk végre számítási környezetként.

Megjegyzés:

A parancssorból futó minta bemutatásához tekintse meg ezt a videót: SQL Server 2017 Advanced Analytics és Python

példakód

from revoscalepy import RxComputeContext, RxInSqlServer, RxSqlServerData
from revoscalepy import rx_lin_mod, rx_predict, rx_summary
from revoscalepy import RxOptions, rx_import

import os

def test_linmod_sql():
    sql_server = os.getenv('PYTEST_SQL_SERVER', '.')
    
    sql_connection_string = 'Driver=SQL Server;Server=' + sqlServer + ';Database=sqlpy;Trusted_Connection=True;'
    print("connectionString={0!s}".format(sql_connection_string))

    data_source = RxSqlServerData(
        sql_query = "select top 10 * from airlinedemosmall",
        connection_string = sql_connection_string,

        column_info = {
            "ArrDelay" : { "type" : "integer" },
            "DayOfWeek" : {
                "type" : "factor",
                "levels" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]
            }
        })

    sql_compute_context = RxInSqlServer(
        connection_string = sql_connection_string,
        num_tasks = 4,
        auto_cleanup = False
        )

    #
    # Run linmod locally
    #
    linmod_local = rx_lin_mod("ArrDelay ~ DayOfWeek", data = data_source)
    #
    # Run linmod remotely
    #
    linmod = rx_lin_mod("ArrDelay ~ DayOfWeek", data = data_source, compute_context = sql_compute_context)

    # Predict results
    # 
    predict = rx_predict(linmod, data = rx_import(input_data = data_source))
    summary = rx_summary("ArrDelay ~ DayOfWeek", data = data_source, compute_context = sql_compute_context)

Adatforrás definiálása és számítási környezet meghatározása

Az adatforrások eltérnek a számítási környezettől. Az adatforrás határozza meg a kódban használt adatokat. A számítási környezet határozza meg a kód végrehajtásának helyét. Ezek azonban a következő információk némelyikét használják:

  • Python-változók, például sql_query és sql_connection_string, határozzák meg az adatok forrását.

    Adja át ezeket a változókat az RxSqlServerData konstruktornak a névvel ellátott data_source implementálásához.

  • A számítási környezet objektumát az RxInSqlServer konstruktor használatával hozhatja létre. Az eredményként kapott számítási környezet objektum neve sql_cc.

    Ez a példa ugyanazt a kapcsolati sztringet használja újra, amelyet az adatforrásban használt, feltételezve, hogy az adatok ugyanazon az SQL Server-példányon vannak, amelyet számítási környezetként fog használni.

    Az adatforrás és a számítási környezet azonban különböző kiszolgálókon is lehet.

Számítási környezetek módosítása

A számítási környezet definiálása után be kell állítania az aktív számítási környezetet.

Alapértelmezés szerint a legtöbb művelet helyileg fut, ami azt jelenti, hogy ha nem ad meg másik számítási környezetet, az adatok az adatforrásból lesznek lekérve, és a kód az aktuális Python-környezetben fog futni.

Az aktív számítási környezet kétféleképpen állítható be:

  • Metódus vagy függvény argumentumaként
  • A rx_set_computecontext hívásával

Számítási környezet beállítása metódus vagy függvény argumentumaként

Ebben a példában a számítási környezetet az egyes rx függvény argumentumával állítja be.

linmod = rx_lin_mod_ex("ArrDelay ~ DayOfWeek", data = data, compute_context = sql_compute_context)

Ezt a számítási környezetet a rendszer újra felhasználja az rxsummary hívásában:

summary = rx_summary("ArrDelay ~ DayOfWeek", data = data_source, compute_context = sql_compute_context)

Számítási környezet explicit beállítása rx_set_compute_context használatával

A függvény rx_set_compute_context lehetővé teszi a már definiált számítási környezetek közötti váltást.

Az aktív számítási környezet beállítása után az aktív marad, amíg meg nem változtatja.

Párhuzamos feldolgozás és streamelés használata

A számítási környezet meghatározásakor olyan paramétereket is beállíthat, amelyek szabályozzák az adatok számítási környezet általi kezelését. Ezek a paraméterek az adatforrás típusától függően eltérőek.

SQL Server számítási környezetek esetén beállíthatja a köteg méretét, vagy tippeket adhat a párhuzamosság mértékéről a futó feladatokban.

  • A mintát egy négy processzorral rendelkező számítógépen futtatták, így a num_tasks paraméter értéke 4, így lehetővé teszi az erőforrások maximális használatát.
  • Ha ezt az értéket 0 értékre állítja, az SQL Server az alapértelmezett értéket használja, amely a kiszolgáló jelenlegi MAXDOP-beállításai között a lehető legtöbb feladat párhuzamos futtatását teszi lehetővé. A lefoglalható feladatok pontos száma azonban számos egyéb tényezőtől függ, például a kiszolgáló beállításaitól és a futó egyéb feladatoktól.

Következő lépések

Ezek a további Python-minták és oktatóanyagok az összetettebb adatforrásokat használó, végpontok közötti forgatókönyveket, valamint a távoli számítási környezetek használatát mutatják be.