Использование Python с revoscalepy для создания модели, которая выполняется удаленно на SQL ServerUse Python with revoscalepy to create a model that runs remotely on SQL Server

Применимо к:Applies to: даSQL Server 2017 (14.x);SQL Server 2017 (14.x)yesSQL Server 2017 (14.x);SQL Server 2017 (14.x) и более поздние версииПрименимо к:Applies to: даSQL Server 2017 (14.x);SQL Server 2017 (14.x)yesSQL Server 2017 (14.x);SQL Server 2017 (14.x) and later

Библиотека revoscalepy Python от корпорации Майкрософт предоставляет алгоритмы обработки и анализа данных для просмотра, визуализации, преобразования и анализа данных.The revoscalepy Python library from Microsoft provides data science algorithms for data exploration, visualization, transformations, and analysis. Эта библиотека имеет стратегическое значение в сценариях интеграции Python в SQL Server.This library has strategic importance in Python integration scenarios in SQL Server. На многоядерном сервере функции revoscalepy могут выполняться параллельно.On a multi-core server, revoscalepy functions can run in parallel. В распределенной архитектуре с центральным сервером и клиентскими рабочими станциями (разными физическими компьютерами, на каждом из которых установлена библиотека revoscalepy) можно написать код Python, который запускается локально, но затем его выполнение перемещается на удаленный экземпляр SQL Server, в котором находятся данные.In a distributed architecture with a central server and client workstations (separate physical computers, all having the same revoscalepy library), you can write Python code that starts locally, but then shifts execution to a remote SQL Server instance where data resides.

Библиотеку revoscalepy можно найти в составе следующих продуктов и дистрибутивов Майкрософт:You can find revoscalepy in the following Microsoft products and distributions:

В этом упражнении показано, как создать модель линейной регрессии на основе rx_lin_mod, одного из алгоритмов revoscalepy, принимающего контекст вычислений в качестве входных данных.This exercise demonstrates how to create a linear regression model based on rx_lin_mod, one of the algorithms in revoscalepy that accepts compute context as an input. Код, который вы будете использовать в этом упражнении, перемещает выполнение кода из локальной среды в удаленную вычислительную среду. Эта среда активируется благодаря функциям revoscalepy, которые позволяют использовать удаленный контекст вычислений.The code you'll run in this exercise shifts code execution from a local to remote computing environment, enabled by revoscalepy functions that enable a remote compute context.

Выполнив инструкции из этого учебника, вы научитесь:By completing this tutorial, you will learn how to:

  • Использовать revoscalepy для создания линейной моделиUse revoscalepy to create a linear model
  • Перемещать операции из локальной среды в удаленный контекст вычисленийShift operations from local to remote compute context

Предварительные требованияPrerequisites

В качестве примера данных в этом упражнении используется база данных flightdata.Sample data used in this exercise is the flightdata database.

Для запуска примера кода из этой статьи требуется интегрированная среда разработки, связанная с исполняемым файлом Python.You need an IDE to run the sample code in this article, and the IDE must be linked to the Python executable.

Чтобы попрактиковаться в перемещении контекста вычислений, понадобятся локальная рабочая станция и экземпляр ядра СУБД SQL Server со Службами машинного обучения и Python.To practice a compute context shift, you need a local workstation and a SQL Server database engine instance with Machine Learning Services and Python enabled.

Совет

Если у вас нет двух компьютеров, можно имитировать удаленный контекст вычислений на том же физическом компьютере, установив соответствующие приложения.If you don't have two computers, you can simulate a remote compute context on one physical computer by installing relevant applications. Во-первых, вам понадобится установить Службы машинного обучения SQL Server, выступающие в качестве "удаленного экземпляра".First, an installation of SQL Server Machine Learning Services operates as the "remote" instance. Во-вторых, вам понадобится установить клиентские библиотеки Python, выступающие в качестве клиента.Second, an installation of the Python client libraries operates as the client. На одном компьютере будут находиться две копии одного и того же дистрибутива Python и библиотек Python Майкрософт.You will have two copies of the same Python distribution and Microsoft Python libraries on the same machine. Для успешного выполнения упражнения необходимо отслеживать пути к файлам и следить за тем, какую копию Python.exe вы используете.You will have to keep track of file paths and which copy of the Python.exe you are using to complete the exercise successfully.

Удаленные контексты вычислений и revoscalepyRemote compute contexts and revoscalepy

В этом примере демонстрируется процесс создания модели Python в удаленном контексте вычислений, что позволяет работать с клиентом, но выбрать удаленную среду, например, SQL Server, Spark или Machine Learning Server, в которой будут фактически выполняться операции.This sample demonstrates the process of creating a Python model in a remote compute context, which lets you work from a client, but choose a remote environment, such as SQL Server, Spark, or Machine Learning Server, where the operations are actually performed. Цель удаленного контекста вычислений заключается в том, чтобы перенести вычисления в место, где находятся данные.The objective of remote compute context is to bring computation to where the data resides.

Для выполнения кода Python в SQL Server требуется пакет revoscalepy.To execute Python code in SQL Server requires the revoscalepy package. Это специальный пакет Python, предоставляемый корпорацией Майкрософт. Он аналогичен пакету RevoScaleR для языка R.This is a special Python package provided by Microsoft, similar to the RevoScaleR package for the R language. Пакет revoscalepy поддерживает создание контекстов вычислений и предоставляет инфраструктуру для передачи данных и моделей между локальной рабочей станцией и удаленным сервером.The revoscalepy package supports the creation of compute contexts, and provides the infrastructure for passing data and models between a local workstation and a remote server. Функция revoscalepy, которая поддерживает выполнение кода в базе данных — RxInSqlServer.The revoscalepy function that supports in-database code execution is RxInSqlServer.

На этом занятии вы используете данные в SQL Server для обучения линейной модели на основе rx_lin_mod, функции revoscalepy, которая поддерживает регрессию для очень больших наборов данных.In this lesson, you use data in SQL Server to train a linear model based on rx_lin_mod, a function in revoscalepy that supports regression over very large datasets.

На этом занятии также показаны основные действия по настройке и последующему использованию контекста вычислений SQL Server в Python.This lesson also demonstrates the basics of how to set up and then use a SQL Server compute context in Python. Обсуждение того, как контексты вычислений взаимодействуют с другими платформами и какие контексты вычислений поддерживаются, см. в разделе Контекст вычислений для выполнения сценариев в Machine Learning Server.For a discussion of how compute contexts work with other platforms, and which compute contexts are supported, see Compute context for script execution in Machine Learning Server.

Запуск примера кодаRun the sample code

После подготовки базы данных и данных для обучения, хранящихся в таблице, откройте среду разработки Python и запустите пример кода.After you have prepared the database and have the data for training stored in a table, open a Python development environment and run the code sample.

Код выполняет следующие действия:The code performs the following steps:

  1. Импортирует необходимые библиотеки и функции.Imports the required libraries and functions.
  2. Создает подключение к SQL Server.Creates a connection to SQL Server. Создает объекты источника данных для работы с данными.Creates data source objects for working with the data.
  3. Изменяет данные с помощью преобразований, чтобы их можно было использовать в алгоритме логистической регрессии.Modifies the data using transformations so that it can be used by the logistic regression algorithm.
  4. Вызывает rx_lin_mod и определяет формулу, используемую для соответствия модели.Calls rx_lin_mod and defines the formula used to fit the model.
  5. Формирует набор прогнозов на основе исходных данных.Generates a set of predictions based on the original data.
  6. Создает сводку на основе прогнозируемых значений.Creates a summary based on the predicted values.

Все операции выполняются с использованием экземпляра SQL Server в качестве контекста вычислений.All operations are performed using an instance of SQL Server as the compute context.

Примечание

Демонстрацию этого примера, выполняемого из командной строки, см. в этом видео: Расширенная аналитика SQL Server 2017 с использованием PythonFor a demonstration of this sample running from the command line, see this video: SQL Server 2017 Advanced Analytics with Python

Образец кодаSample code

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)

Определение источника данных и определение контекста вычисленийDefining a data source vs. defining a compute context

Источник данных отличается от контекста вычислений.A data source is different from a compute context. источник данных определяет данные, используемые в коде.The data source defines the data used in your code. Контекст вычислений определяет, где будет выполняться код.The compute context defines where the code will be executed. Однако источник данных и контекст вычислений используют одни и те же сведения:However, they use some of the same information:

  • Переменные Python, такие как sql_query и sql_connection_string, определяют источник данных.Python variables, such as sql_query and sql_connection_string, define the source of the data.

    Передайте эти переменные в конструктор RxSqlServerData, чтобы реализовать объект источника данных с именем data_source.Pass these variables to the RxSqlServerData constructor to implement the data source object named data_source.

  • Вы создаете объект контекста вычислений с помощью конструктора RxInSqlServer.You create a compute context object by using the RxInSqlServer constructor. Результирующий объект контекста вычислений называется sql_cc.The resulting compute context object is named sql_cc.

    В этом примере повторно используется та же строка подключения, которая использовалась в источнике данных, исходя из предположения, что данные находятся на том же экземпляре SQL Server, который будет использоваться в качестве контекста вычислений.This example re-uses the same connection string that you used in the data source, on the assumption that the data is on the same SQL Server instance that you will be using as the compute context.

    Однако источник данных и контекст вычислений могут находиться на разных серверах.However, the data source and the compute context could be on different servers.

Изменение контекстов вычисленийChanging compute contexts

После определения контекста вычислений необходимо задать активный контекст вычислений.After you define a compute context, you must set the active compute context.

По умолчанию большинство операций выполняются локально. Это означает, что если не указать другой контекст вычислений, данные будут передаваться из источника данных, а код будет выполняться в текущей среде Python.By default, most operations are run locally, which means that if you don't specify a different compute context, the data will be fetched from the data source, and the code will run in your current Python environment.

Существует два способа установки активного контекста вычислений:There are two ways to set the active compute context:

  • В качестве аргумента метода или функцииAs an argument of a method or function
  • С помощью вызова rx_set_computecontextBy calling rx_set_computecontext

Установка контекста вычислений в качестве аргумента метода или функцииSet compute context as an argument of a method or function

В этом примере вы задаете контекст вычислений, используя аргумент отдельной функции rx.In this example, you set the compute context by using an argument of the individual rx function.

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

Этот контекст вычислений повторно используется в вызове метода rxsummary:This compute context is reused in the call to rxsummary:

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

Установка контекста вычислений явным образом с помощью rx_set_compute_contextSet a compute context explicitly using rx_set_compute_context

Функция rx_set_compute_context позволяет переключаться между контекстами вычислений, которые уже определены.The function rx_set_compute_context lets you toggle between compute contexts that have already been defined.

После установки активного контекста вычислений он будет оставаться активным, пока вы не измените его.After you have set the active compute context, it remains active until you change it.

Использование параллельной обработки и потоковой передачиUsing parallel processing and streaming

При определении контекста вычислений можно также задать параметры, определяющие способ обработки данных в контексте вычислений.When you define the compute context, you can also set parameters that control how the data is handled by the compute context. Эти параметры зависят от типа источника данных.These parameters differ depending on the data source type.

Для контекстов вычислений SQL Server можно задать размер пакета или указать степень параллелизма, которая будет использоваться в выполняющихся задачах.For SQL Server compute contexts, you can set the batch size, or provide hints about the degree of parallelism to use in running tasks.

  • Пример был запущен на компьютере с четырьмя процессорами, поэтому для параметра num_tasks задано значение 4, чтобы разрешить максимальное использование ресурсов.The sample was run on a computer with four processors, so the num_tasks parameter is set to 4 to allow maximum use of resources.
  • Если задать для этого параметра значение 0, то SQL Server использует значение по умолчанию, которое позволяет параллельно выполнять максимально возможное число задач в соответствии с текущими параметрами MAXDOP для сервера.If you set this value to 0, SQL Server uses the default, which is to run as many tasks in parallel as possible, under the current MAXDOP settings for the server. Однако точное количество задач, которые могут быть выделены, зависит от многих других факторов, таких как параметры сервера и другие выполняемые задания.However, the exact number of tasks that might be allocated depends on many other factors, such as server settings, and other jobs that are running.

Дальнейшие действияNext steps

Эти дополнительные примеры и учебники Python демонстрируют комплексные сценарии использования более сложных источников данных, а также использование удаленных контекстов вычислений.These additional Python samples and tutorials demonstrate end-to-end scenarios using more complex data sources, as well as the use of remote compute contexts.