Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2017 (14.x) a novější verze
Azure SQL Managed Instance
V tomto rychlém startu vytvoříte a vytrénujete prediktivní model pomocí Pythonu. Model uložíte do tabulky v instanci SQL Serveru a pak použijete model k predikci hodnot z nových dat pomocí služeb SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services nebo clusterů SQL Server Big Data.
Vytvoříte a spustíte dvě uložené procedury spuštěné v SQL. První používá klasickou datovou sadu iris květin a vygeneruje model Naïve Bayes k predikci druhu Iris na základě vlastností květin. Druhým postupem je bodování – volá model vygenerovaný v prvním postupu k výstupu sady predikcí na základě nových dat. Umístěním kódu Pythonu do uložené procedury SQL jsou operace obsaženy v SQL, jsou opakovaně použitelné a dají se volat jinými uloženými procedurami a klientskými aplikacemi.
Po dokončení tohoto rychlého startu se naučíte:
- Jak vložit kód Pythonu do uložené procedury
- Jak předat vstupy do kódu prostřednictvím parametrů uložené procedury
- Jak se uložené procedury používají k zprovoznění modelů
Požadavky
Ke spuštění tohoto rychlého startu potřebujete následující požadavky.
Databáze SQL na jedné z těchto platforem:
- služby pro strojové učení serveru SQL. Pokud ho chcete nainstalovat, přečtěte si průvodce instalací Windows nebo průvodce instalací Linuxu.
- Clustery SQL Serveru pro velké objemy dat Podívejte se, jak povolit službu Machine Learning Services v clusterech s velkými objemy dat SQL Serveru.
- Azure SQL Managed Instance Machine Learning Services Informace najdete v přehledu služby Azure SQL Managed Instance Machine Learning Services.
Nástroj pro spouštění dotazů SQL, které obsahují skripty Pythonu. V tomto rychlém startu se používá Azure Data Studio.
Ukázková data použitá v tomto cvičení jsou ukázková data Iris. Podle pokynů v ukázkových datech Iris vytvořte ukázkovou databázi irissql.
Vytvoření uložené procedury, která generuje modely
V tomto kroku vytvoříte uloženou proceduru, která vygeneruje model pro predikci výsledků.
Otevřete Azure Data Studio, připojte se k instanci SQL a otevřete nové okno dotazu.
Připojte se k databázi irissql.
USE irissql GOZkopírujte následující kód a vytvořte novou uloženou proceduru.
Po spuštění tento postup volá sp_execute_external_script ke spuštění relace Pythonu.
Vstupy potřebné kódem Pythonu se předávají jako vstupní parametry pro tuto uloženou proceduru. Výstupem bude natrénovaný model založený na knihovně Python scikit-learn pro algoritmus strojového učení.
Tento kód používá pickle k serializaci modelu. Model bude trénován pomocí dat ze sloupců 0 až 4 z tabulky iris_data .
Parametry, které vidíte v druhé části procedury, vyjadřují vstupy dat a výstupy modelu. Co nejvíce chcete, aby kód Pythonu spuštěný v uložené proceduře měl jasně definované vstupy a výstupy, které se mapují na uložené vstupy procedur a výstupy předávané za běhu.
CREATE PROCEDURE generate_iris_model (@trained_model VARBINARY(max) OUTPUT) AS BEGIN EXECUTE sp_execute_external_script @language = N'Python' , @script = N' import pickle from sklearn.naive_bayes import GaussianNB GNB = GaussianNB() trained_model = pickle.dumps(GNB.fit(iris_data[["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"]], iris_data[["SpeciesId"]].values.ravel())) ' , @input_data_1 = N'select "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "SpeciesId" from iris_data' , @input_data_1_name = N'iris_data' , @params = N'@trained_model varbinary(max) OUTPUT' , @trained_model = @trained_model OUTPUT; END; GOOvěřte, že uložená procedura existuje.
Pokud se skript T-SQL z předchozího kroku spustil bez chyby, vytvoří se nová uložená procedura s názvem generate_iris_model a přidá se do databáze irissql . Uložené procedury najdete v Průzkumníku objektů azure Data Studio v části Programovatelnost.
Proveďte postup pro vytvoření a natrénování modelů
V tomto kroku spustíte proceduru pro spuštění vloženého kódu a vytvoříte natrénovaný a serializovaný model jako výstup.
Modely uložené pro opakované použití v databázi jsou serializovány jako bajtový datový proud a uloženy ve sloupci VARBINARY(MAX) v tabulce databáze. Jakmile se model vytvoří, vytrénuje, serializuje a uloží do databáze, může být volán jinými postupy nebo funkcí PREDICT T-SQL v bodovacích úlohách.
Spuštěním následujícího skriptu spusťte proceduru. Konkrétní příkaz pro provedení uložené procedury je
EXECUTEna čtvrtém řádku.Tento konkrétní skript odstraní existující model se stejným názvem ("Naive Bayes") a vytvoří místo pro nové, které vytvoříte opětovným spuštěním stejného postupu. Bez odstranění modelu dojde k chybě, která hlásí, že objekt již existuje. Model je uložený v tabulce s názvem iris_models, která se zřizuje při vytváření databáze irissql .
DECLARE @model varbinary(max); DECLARE @new_model_name varchar(50) SET @new_model_name = 'Naive Bayes' EXECUTE generate_iris_model @model OUTPUT; DELETE iris_models WHERE model_name = @new_model_name; INSERT INTO iris_models (model_name, model) values(@new_model_name, @model); GOOvěřte, že byl model vložen.
SELECT * FROM dbo.iris_modelsResults
model_name model Naive Bayes 0x800363736B6C6561726E2E6E616976655F62617965730A...
Vytvoření a spuštění uložené procedury pro generování předpovědí
Teď, když jste vytvořili, vytrénovali a uložili model, přejděte k dalšímu kroku: vytvoření uložené procedury, která generuje předpovědi. Uděláte to tak, že zavoláte sp_execute_external_script ke spuštění skriptu Pythonu, který načte serializovaný model a poskytne mu nové vstupy dat pro určení skóre.
Spuštěním následujícího kódu vytvořte uloženou proceduru, která provádí vyhodnocování. V době běhu tento postup načte binární model, použije sloupce
[1,2,3,4]jako vstupy a zadá sloupce[0,5,6]jako výstup.CREATE PROCEDURE predict_species (@model VARCHAR(100)) AS BEGIN DECLARE @nb_model VARBINARY(max) = ( SELECT model FROM iris_models WHERE model_name = @model ); EXECUTE sp_execute_external_script @language = N'Python' , @script = N' import pickle irismodel = pickle.loads(nb_model) species_pred = irismodel.predict(iris_data[["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"]]) iris_data["PredictedSpecies"] = species_pred OutputDataSet = iris_data[["id","SpeciesId","PredictedSpecies"]] print(OutputDataSet) ' , @input_data_1 = N'select id, "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "SpeciesId" from iris_data' , @input_data_1_name = N'iris_data' , @params = N'@nb_model varbinary(max)' , @nb_model = @nb_model WITH RESULT SETS(( "id" INT , "SpeciesId" INT , "SpeciesId.Predicted" INT )); END; GOSpusťte uloženou proceduru a pojmenujte model "Naive Bayes", aby procedura věděla, který model se má použít.
EXECUTE predict_species 'Naive Bayes'; GOKdyž spustíte uloženou proceduru, vrátí datový rámec Pythonu. Tento řádek T-SQL určuje schéma pro vrácené výsledky:
WITH RESULT SETS ( ("id" int, "SpeciesId" int, "SpeciesId.Predicted" int));. Výsledky můžete vložit do nové tabulky nebo je vrátit do aplikace.
Výsledky jsou 150 předpovědí o druhu používajících květinové charakteristiky jako vstupy. U většiny pozorování odpovídá predikovaný druh skutečnému druhu.
Tento příklad byl jednoduchý pomocí datové sady Iris Pythonu pro trénování i vyhodnocování. Typický přístup by zahrnoval spuštění dotazu SQL pro získání nových dat a předání do Pythonu jako
InputDataSet.
Conclusion
V tomto cvičení jste se dozvěděli, jak vytvořit uložené procedury vyhrazené pro různé úlohy, kde každá uložená procedura používala systémovou uloženou proceduru sp_execute_external_script ke spuštění procesu Pythonu. Vstupy do procesu Pythonu se předávají sp_execute_external jako parametry. Skript Pythonu i datové proměnné v databázi se předávají jako vstupy.
Obecně byste měli plánovat použití nástroje Azure Data Studio s leštěným kódem Pythonu nebo jednoduchým kódem Pythonu, který vrací výstup založený na řádcích. Azure Data Studio jako nástroj podporuje dotazovací jazyky, jako je T-SQL, a vrací ploché sady řádků. Pokud váš kód generuje vizuální výstup, jako je bodový graf nebo histogram, potřebujete samostatný nástroj nebo aplikaci koncového uživatele, která může vykreslit obrázek mimo uloženou proceduru.
Pro některé vývojáře Pythonu, kteří jsou zvyklí psaní všeobsažených skriptů, které zpracovávají celou řadu operací, může zdát zbytečné organizovat úlohy do samostatných procedur. Ale školení a bodování mají různé případy použití. Když je oddělíte, můžete každou úlohu umístit do jiného harmonogramu a určit rozsah oprávnění pro každou operaci.
Poslední výhodou je, že procesy je možné upravit pomocí parametrů. V tomto cvičení se kód Pythonu, který v tomto příkladu vytvořil model (pojmenovaný Naive Bayes), předal jako vstup do druhé uložené procedury, která model volá v procesu vyhodnocování. Toto cvičení používá pouze jeden model, ale můžete si představit, jak by parametrizace modelu v úloze hodnocení mohla učinit tento skript užitečnějším.
Další kroky
Další informace o kurzech pro Python s využitím strojového učení SQL najdete tady: