Расширение языка Python в Службах машинного обучения SQL ServerPython language extension in SQL Server Machine Learning Services

Применимо к: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

В этой статье описывается расширение Python для выполнения внешних скриптов Python с помощью Службы машинного обучения SQL Server.This article describes the Python extension for running external Python scripts with SQL Server Machine Learning Services. Расширение добавляет следующее.The extension adds:

  • Среда выполненияA Python execution environment
  • Распространение Anaconda с помощью среды выполнения и интерпретатора Python 3.5Anaconda distribution with the Python 3.5 runtime and interpreter
  • Стандартные библиотеки и средстваStandard libraries and tools
  • Пакеты Microsoft PythonMicrosoft Python packages:
    • revoscalepy для аналитики в большом масштабе.revoscalepy for analytics at scale.
    • microsoftml для алгоритмов машинного обучения.microsoftml for machine learning algorithms.

Установка среды выполнения и интерпретатора Python 3.5 гарантирует почти полную совместимость со стандартными решениями Python.Installation of the Python 3.5 runtime and interpreter ensures near-complete compatibility with standard Python solutions. Python и SQL Server выполняются в отдельных процессах, чтобы гарантировать, что операции с базой данных не будут скомпрометированы.Python runs in a separate process from SQL Server, to guarantee that database operations are not compromised.

Компоненты PythonPython components

SQL Server содержит как пакеты с открытым исходным кодом, так и проприетарные пакеты.SQL Server includes both open-source and proprietary packages. Среда выполнения Python, которая устанавливается программой установки — Anaconda 4.2 с Python 3.5.The Python runtime installed by Setup is Anaconda 4.2 with Python 3.5. Среда выполнения Python устанавливается независимо от инструментов SQL и выполняется вне базовых процессов ядра на платформе расширяемости.The Python runtime is installed independently of SQL tools, and is executed outside of core engine processes, in the extensibility framework. При установке служб машинного обучения с Python вы должны принять условия открытой лицензии GNU.As part of the installation of Machine Learning Services with Python, you must consent to the terms of the GNU Public License.

SQL Server не изменяет базовые исполняемые файлы Python, однако необходимо использовать именно ту версию Python, которая была установлена программой установки, так как на базе этой версии устанавливаются и тестируются проприетарные пакеты.SQL Server does not modify the Python executables, but you must use the version of Python installed by Setup because that version is the one that the proprietary packages are built and tested on. Список пакетов, поддерживаемых дистрибутивом Anaconda, см. на сайте аналитики Continuum: список пакетов Anaconda.For a list of packages supported by the Anaconda distribution, see the Continuum analytics site: Anaconda package list.

Дистрибутив Anaconda, связанный с конкретным экземпляром ядра СУБД, можно найти в папке, связанной с этим экземпляром.The Anaconda distribution associated with a specific database engine instance can be found in the folder associated with the instance. Например, если вы установили ядро СУБД SQL Server 2017 со службами машинного обучения и Python на экземпляре по умолчанию, обратитесь к папке C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES.For example, if you installed SQL Server 2017 database engine with Machine Learning Services and Python on the default instance, look under C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES.

Пакеты Python, добавленные корпорацией Майкрософт для параллельных и распределенных рабочих нагрузок, включают следующие библиотеки.Python packages added by Microsoft for parallel and distributed workloads include the following libraries.

БиблиотекаLibrary ОписаниеDescription
revoscalepyrevoscalepy Поддерживает объекты источников данных и просмотр, обработку, преобразование и визуализацию данных.Supports data source objects and data exploration, manipulation, transformation, and visualization. Поддерживает создание удаленных контекстов вычислений, а также различные масштабируемые модели машинного обучения, такие как rxLinMod.It supports creation of remote compute contexts, as well as a various scalable machine learning models, such as rxLinMod. Дополнительные сведения см. в разделе Модуль revoscalepy в SQL Server.For more information, see revoscalepy module with SQL Server.
microsoftmlmicrosoftml Содержит алгоритмы машинного обучения, оптимизированные для достижения высокой скорости и точности, а также встроенные преобразования для работы с текстом и изображениями.Contains machine learning algorithms that have been optimized for speed and accuracy, as well as in-line transformations for working with text and images. Дополнительные сведения см. в разделе Модуль microsoftml в SQL Server.For more information, see microsoftml module with SQL Server.

Модули microsoftml и revoscalepy тесно связаны. Источники данных, используемые в microsoftml, определяются как объекты revoscalepy.Microsoftml and revoscalepy are tightly coupled; data sources used in microsoftml are defined as revoscalepy objects. Ограничения контекста вычислений в revoscalepy распространяются на microsoftml.Compute context limitations in revoscalepy transfer to microsoftml. То есть для локальных операций доступны все функции, но для переключения на удаленный контекст вычислений требуется RxInSqlServer.Namely, all functionality is available for local operations, but switching to a remote compute context requires RxInSqlServer.

Использование Python в SQL ServerUsing Python in SQL Server

Вы импортируете модуль revoscalepy в код Python, а затем вызываете функции этого модуля в коде точно так же, как и любые другие функции Python.You import the revoscalepy module into your Python code, and then call functions from the module, like any other Python functions.

К поддерживаемым источникам данных относятся базы данных ODBC, SQL Server и формат файлов XDF для обмена данными с другими источниками или с решениями R.Supported data sources include ODBC databases, SQL Server, and XDF file format to exchange data with other sources, or with R solutions. Входные данные для Python должны иметь табличный формат.Input data for Python must be tabular. Все результаты Python должны возвращаться в виде кадра данных pandas.All Python results must be returned in the form of a pandas data frame.

Поддерживаемые контексты вычислений включают локальный и удаленный контексты вычислений SQL Server.Supported compute contexts include local, or remote SQL Server compute context. Удаленный контекст вычислений относится к выполнению кода, которое начинается на одном компьютере, например на рабочей станции, но затем выполнение сценария переключается на удаленный компьютер.A remote compute context refers to code execution that starts on one computer such as a workstation, but then switches script execution to a remote computer. Для переключения контекста вычислений необходимо, чтобы в обеих системах использовалась одна и та же библиотека revoscalepy.Switching the compute context requires that both systems have the same revoscalepy library.

Локальный контекст вычислений, как и можно было бы ожидать, включает выполнение кода Python на том же сервере, на котором находится экземпляр ядра СУБД, причем код располагается в T-SQL или включается в хранимую процедуру.Local compute context, as you might expect, includes execution of Python code on the same server as the database engine instance, with code inside T-SQL or embedded in a stored procedure. Также можно запустить код из локальной интегрированной среды разработки Python и сделать так, что сценарий будет выполнен на компьютере SQL Server, задав удаленный контекст вычислений.You can also run the code from a local Python IDE and have the script execute on the SQL Server computer, by defining a remote compute context.

Архитектура выполненияExecution architecture

На следующих схемах показано взаимодействие компонентов SQL Server со средой выполнения Python в каждом из поддерживаемых сценариев: выполнение сценария в базе данных и удаленное выполнение из терминала Python с использованием контекста вычислений SQL Server.The following diagrams depict the interaction of SQL Server components with the Python runtime in each of the supported scenarios: running script in-database, and remote execution from a Python terminal, using a SQL Server compute context.

Сценарии Python, выполняемые в базе данныхPython scripts executed in-database

При запуске Python "внутри" SQL Server необходимо инкапсулировать сценарий Python в специальную хранимую процедуру sp_execute_external_script.When you run Python "inside" SQL Server, you must encapsulate the Python script inside a special stored procedure, sp_execute_external_script.

После внедрения сценария в хранимую процедуру любое приложение, которое может вызвать хранимую процедуру, может инициировать выполнение кода Python.After the script has been embedded in the stored procedure, any application that can make a stored procedure call can initiate execution of the Python code. После этого SQL Server управляет выполнением кода, как показано на следующей схеме.Thereafter SQL Server manages code execution as summarized in the following diagram.

script-in-db-python

  1. Запрос к среде выполнения Python задается с помощью параметра @language='Python', передаваемого хранимой процедуре.A request for the Python runtime is indicated by the parameter @language='Python' passed to the stored procedure. SQL Server отправляет этот запрос в службу панели запуска.SQL Server sends this request to the launchpad service. В Linux SQL использует службу панели запуска для взаимодействия с отдельным процессом панели запуска для каждого пользователя.In Linux, SQL uses a launchpadd service to communicate with a separate launchpad process for each user. Дополнительные сведения см. на схеме архитектуры расширяемости.See the Extensibility architecture diagram for details.
  2. Служба панели запуска запускает соответствующее средство запуска, в данном случае, PythonLauncher.The launchpad service starts the appropriate launcher; in this case, PythonLauncher.
  3. PythonLauncher запускает внешний процесс Python35.PythonLauncher starts the external Python35 process.
  4. BxlServer взаимодействует со средой выполнения Python для управления обменом данными и сохранения результатов работы.BxlServer coordinates with the Python runtime to manage exchanges of data, and storage of working results.
  5. Вспомогательное соединение SQL контролирует взаимодействие связанных задач и процессов с SQL Server.SQL Satellite manages communications about related tasks and processes with SQL Server.
  6. BxlServer использует вспомогательное соединение SQL для передачи состояния и результатов в SQL Server.BxlServer uses SQL Satellite to communicate status and results to SQL Server.
  7. SQL Server получает результаты и закрывает связанные задачи и процессы.SQL Server gets results and closes related tasks and processes.

Скрипты Python, выполняемые из удаленного клиентаPython scripts executed from a remote client

Сценарии Python можно запускать с удаленного компьютера, например, с ноутбука, и выполнять их в контексте компьютера SQL Server, если выполняются следующие условия:You can run Python scripts from a remote computer, such as a laptop, and have them execute in the context of the SQl Server computer, if these conditions are met:

  • Сценарии разработаны соответствующим образомYou design the scripts appropriately
  • На удаленном компьютере установлены библиотеки расширяемости, используемые службами машинного обучения.The remote computer has installed the extensibility libraries that are used by Machine Learning Services. Для использования удаленных контекстов вычислений необходим пакет revoscalepy.The revoscalepy package is required to use remote compute contexts.

На следующем рисунке показана общая схема рабочего процесса, в которой сценарии отправляются с удаленного компьютера.The following diagram summarizes the overall workflow when scripts are sent from a remote computer.

remote-sqlcc-from-python

  1. Для функций, поддерживаемых в revoscalepy, среда выполнения Python вызывает связующую функцию, которая, в свою очередь, вызывает BxlServer.For functions that are supported in revoscalepy, the Python runtime calls a linking function, which in turn calls BxlServer.
  2. BxlServer входит в состав служб машинного обучения (в базе данных) и выполняется в отдельном процессе в среде выполнения Python.BxlServer is included with Machine Learning Services (In-Database) and runs in a separate process from the Python runtime.
  3. BxlServer определяет целевой объект подключения и инициирует подключение с использованием ODBC, передавая учетные данные в строке подключения в сценарии Python.BxlServer determines the connection target and initiates a connection using ODBC, passing credentials supplied as part of the connection string in the Python script.
  4. BxlServer устанавливает подключение к экземпляру SQL Server.BxlServer opens a connection to the SQL Server instance.
  5. При вызове среды выполнения внешнего сценария вызывается служба панели запуска, которая, в свою очередь, запускает подходящее средство запуска, в данном случае PythonLauncher.dll.When an external script runtime is called, the launchpad service is invoked, which in turn starts the appropriate launcher: in this case, PythonLauncher.dll. После этого код Python обрабатывается в рабочем процессе по аналогии с вызовом кода Python из хранимой процедуры в T-SQL.Thereafter, processing of Python code is handled in a workflow similar to that when Python code is invoked from a stored procedure in T-SQL.
  6. PythonLauncher вызывает экземпляр среды выполнения Python, установленной на компьютере SQL Server.PythonLauncher makes a call to the instance of the Python that is installed on the SQL Server computer.
  7. Результаты возвращаются в BxlServer.Results are returned to BxlServer.
  8. Вспомогательное соединение SQL управляет взаимодействием с SQL Server и очисткой связанных объектов задания.SQL Satellite manages communication with SQL Server and cleanup of related job objects.
  9. SQL Server передает результаты клиенту.SQL Server passes results back to the client.

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