Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2017 (14.x) i nowsze wersje
Biblioteka revoscalepy języka Python firmy Microsoft udostępnia algorytmy nauki o danych na potrzeby eksploracji danych, wizualizacji, przekształceń i analizy. Ta biblioteka ma strategiczne znaczenie w scenariuszach integracji języka Python w programie SQL Server. Na serwerze wielordzeniowym funkcje revoscalepy mogą działać równolegle. W architekturze rozproszonej z serwerem centralnym i stacjami roboczymi klienta (oddzielne komputery fizyczne, wszystkie z tą samą biblioteką revoscalepy ), można napisać kod języka Python uruchamiany lokalnie, ale następnie przenosi wykonywanie do zdalnego wystąpienia programu SQL Server, w którym znajdują się dane.
Program revoscalepy można znaleźć w następujących produktach i dystrybucjach firmy Microsoft:
- SQL Server Machine Learning Services (w bazie danych)
- Biblioteki języka Python po stronie klienta (dla deweloperskich stacji roboczych)
W tym ćwiczeniu pokazano, jak utworzyć model regresji liniowej na podstawie rx_lin_mod, jednego z algorytmów w revoscalepy , który akceptuje kontekst obliczeniowy jako dane wejściowe. Kod, który zostanie uruchomiony w tym ćwiczeniu, przenosi wykonywanie kodu z lokalnego do zdalnego środowiska obliczeniowego, włączone przez funkcje revoscalepy , które umożliwiają zdalny kontekst obliczeniowy.
Wykonując czynności z tego samouczka, dowiesz się, jak wykonywać następujące czynności:
- Użyj revoscalepy, aby utworzyć model liniowy
- Przenoszenie operacji z lokalnego do zdalnego kontekstu obliczeniowego
Wymagania wstępne
Przykładowe dane używane w tym ćwiczeniu to baza danych flightdata .
Potrzebujesz środowiska IDE, aby uruchomić przykładowy kod w tym artykule, a środowisko IDE musi być połączone z plikiem wykonywalnym języka Python.
Aby przećwiczyć zmianę kontekstu obliczeniowego, potrzebna jest lokalna stacja robocza i wystąpienie aparatu bazy danych programu SQL Server z włączonymi usługami Machine Learning Services i językiem Python.
Wskazówka
Jeśli nie masz dwóch komputerów, możesz symulować zdalny kontekst obliczeniowy na jednym komputerze fizycznym, instalując odpowiednie aplikacje. Najpierw instalacja usług SQL Server Machine Learning Services działa jako "zdalne" wystąpienie. Po drugie, instalacja bibliotek klienckich języka Python działa jako klient. Na tej samej maszynie będą dostępne dwie kopie tej samej dystrybucji języka Python i bibliotek języka Microsoft Python. Konieczne będzie śledzenie ścieżek plików i kopii Python.exe używanych do pomyślnego ukończenia ćwiczenia.
Zdalne konteksty obliczeniowe i revoscalepy
W tym przykładzie pokazano proces tworzenia modelu języka Python w zdalnym kontekście obliczeniowym, który umożliwia pracę od klienta, ale wybierz środowisko zdalne, takie jak SQL Server lub Spark, w którym operacje są rzeczywiście wykonywane. Celem zdalnego kontekstu obliczeniowego jest przeniesienie obliczeń do miejsca, w którym znajdują się dane.
Aby wykonać kod języka Python w programie SQL Server, wymagany jest pakiet revoscalepy . Jest to specjalny pakiet języka Python dostarczony przez firmę Microsoft, podobny do pakietu RevoScaleR dla języka R. Pakiet revoscalepy obsługuje tworzenie kontekstów obliczeniowych i zapewnia infrastrukturę do przekazywania danych i modeli między lokalną stacją roboczą a serwerem zdalnym. Funkcja revoscalepy , która obsługuje wykonywanie kodu w bazie danych, to RxInSqlServer.
W tej lekcji użyjesz danych w programie SQL Server do wytrenowania modelu liniowego na podstawie rx_lin_mod, funkcji w revoscalepy , która obsługuje regresję w bardzo dużych zestawach danych.
W tej lekcji przedstawiono również podstawy konfigurowania, a następnie używania kontekstu obliczeniowego programu SQL Server w języku Python.
Uruchamianie przykładowego kodu
Po przygotowaniu bazy danych i posiadaniu danych do trenowania przechowywanych w tabeli, otwórz środowisko programistyczne języka Python i uruchom przykład kodu.
Kod wykonuje następujące kroki:
- Importuje wymagane biblioteki i funkcje.
- Tworzy połączenie z programem SQL Server. Tworzy obiekty źródła danych do pracy z danymi.
- Modyfikuje dane przy użyciu przekształceń , aby mogły być używane przez algorytm regresji logistycznej.
- Wywołuje
rx_lin_modi definiuje formułę używaną do dopasowania modelu. - Generuje zestaw przewidywań na podstawie oryginalnych danych.
- Tworzy podsumowanie na podstawie przewidywanych wartości.
Wszystkie operacje są wykonywane przy użyciu wystąpienia programu SQL Server jako kontekstu obliczeniowego.
Uwaga / Notatka
Aby zapoznać się z pokazem tego przykładu uruchomionego z poziomu wiersza polecenia, zobacz ten klip wideo: SQL Server 2017 Advanced Analytics with Python (Zaawansowana analiza programu SQL Server 2017 w języku Python)
Przykładowy kod
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)
Definiowanie źródła danych a definiowanie kontekstu obliczeniowego
Źródło danych różni się od kontekstu obliczeniowego. Źródło danych definiuje dane używane w kodzie. Kontekst obliczeniowy definiuje miejsce wykonywania kodu. Jednak używają one niektórych z tych samych informacji:
Zmienne języka Python, takie jak
sql_queryisql_connection_string, definiują źródło danych.Przekaż te zmienne do konstruktora RxSqlServerData , aby zaimplementować obiekt źródła danych o nazwie
data_source.Obiekt kontekstu obliczeniowego jest tworzony przy użyciu konstruktora RxInSqlServer . Wynikowy obiekt kontekstu obliczeniowego nosi nazwę
sql_cc.W tym przykładzie ponownie użyto tych samych parametrów połączenia, które były używane w źródle danych, przy założeniu, że dane są w tym samym wystąpieniu programu SQL Server, którego będziesz używać jako kontekstu obliczeniowego.
Jednak źródło danych i kontekst obliczeniowy mogą znajdować się na różnych serwerach.
Zmienianie kontekstów obliczeniowych
Po zdefiniowaniu kontekstu obliczeniowego należy ustawić aktywny kontekst obliczeniowy.
Domyślnie większość operacji jest uruchamiana lokalnie, co oznacza, że jeśli nie określisz innego kontekstu obliczeniowego, dane zostaną pobrane ze źródła danych, a kod zostanie uruchomiony w bieżącym środowisku języka Python.
Istnieją dwa sposoby ustawiania aktywnego kontekstu obliczeniowego:
- Jako argument metody lub funkcji
- Przez wywołanie
rx_set_computecontext
Ustawianie kontekstu obliczeniowego jako argumentu metody lub funkcji
W tym przykładzie ustawisz kontekst obliczeniowy przy użyciu argumentu pojedynczej funkcji rx .
linmod = rx_lin_mod_ex("ArrDelay ~ DayOfWeek", data = data, compute_context = sql_compute_context)
Ten kontekst obliczeniowy jest ponownie używany w wywołaniu polecenia rxsummary:
summary = rx_summary("ArrDelay ~ DayOfWeek", data = data_source, compute_context = sql_compute_context)
Jawne ustawianie kontekstu obliczeniowego przy użyciu rx_set_compute_context
Funkcja rx_set_compute_context umożliwia przełączanie się między kontekstami obliczeniowymi, które zostały już zdefiniowane.
Po ustawieniu aktywnego kontekstu obliczeniowego pozostaje aktywny do momentu jego zmiany.
Korzystanie z przetwarzania równoległego i przesyłania strumieniowego
Podczas definiowania kontekstu obliczeniowego można również ustawić parametry kontrolujące sposób obsługi danych przez kontekst obliczeniowy. Te parametry różnią się w zależności od typu źródła danych.
W przypadku kontekstów obliczeniowych programu SQL Server można ustawić rozmiar partii lub podać wskazówki dotyczące stopnia równoległości do użycia w uruchomionych zadaniach.
- Przykład został uruchomiony na komputerze z czterema procesorami, więc
num_tasksparametr ma wartość 4, aby umożliwić maksymalne wykorzystanie zasobów. - Jeśli ustawisz tę wartość na 0, program SQL Server używa wartości domyślnej, która umożliwia równoległe uruchamianie jak największej liczby zadań w ramach bieżących ustawień MAXDOP dla serwera. Jednak dokładna liczba przydzielonych zadań zależy od wielu innych czynników, takich jak ustawienia serwera i innych uruchomionych zadań.
Dalsze kroki
Te dodatkowe przykłady i samouczki języka Python przedstawiają kompleksowe scenariusze korzystające z bardziej złożonych źródeł danych, a także korzystanie z zdalnych kontekstów obliczeniowych.