在 Windows 上安装 SQL Server 机器学习服务(Python 和 R)
适用于:SQL Server 2016 (13.x)、SQL Server 2017 (14.x) 和 SQL Server 2019 (15.x)
本文介绍如何在 Windows 上安装 SQL Server 机器学习服务。 可使用机器学习服务在数据库中运行 Python 和 R 脚本。
重要
这些说明适用于 SQL Server 2016 (13.x)、SQL Server 2017 (14.x) 和 SQL Server 2019 (15.x)。 对于 SQL Server 2022 (16.x),请参阅在 Windows 上安装 SQL Server 2022 机器学习服务。
预安装清单
需要数据库引擎实例。 不能只安装 Python 或 R 功能,但可以将它们逐渐添加到现有的单独实例。
为了实现业务连续性,机器学习服务支持 Always On 可用性组。 在每个节点上安装机器学习服务并配置包。
SQL Server 2017 中的 Always On 故障转移群集实例不支持安装机器学习服务。 SQL Server 2019 及更高版本支持上述服务。 必须在安装时安装机器学习服务,安装后无法将功能添加到现有故障转移群集实例。
不要在域控制器上安装机器学习服务。 安装程序的机器学习服务部分将失败。
不要在运行数据库实例的同一台计算机上安装“共享功能”>“Machine Learning Server(独立)”。 一个独立服务器将争夺相同的资源,并降低这两个安装的性能。
支持并行安装 Python 和 R 的其他版本,但不建议这样做。 之所以支持,是因为 SQL Server 实例使用自己的开源 R 和 Anaconda 分发副本。 不建议这样做,因为在 SQL Server 外部的计算机上运行使用 Python 和 R 的代码可能会导致问题:
- 使用不同的库和不同的可执行文件,将创建与在 SQL Server 中运行的结果不一致的结果。
- SQL Server 无法管理在外部库中运行的 R 和 Python 脚本,从而导致资源争用。
注意
默认情况下,机器学习服务安装在 SQL Server 大数据群集上。 如果使用大数据群集,则无需按照本文中的步骤进行操作。 有关详细信息,请参阅在大数据群集上使用机器学习服务(Python 和 R)。
重要
安装完成后,请务必完成本文中所述的配置后步骤。 这些步骤包括启用 SQL Server 以使用外部脚本,以及以你的名义添加 SQL Server 运行 R 和 Python 作业所需的帐户。 配置更改通常需要重启实例或重启 Launchpad 服务。
获取安装介质
SQL Server 的下载位置由版本决定:
SQL Server Enterprise、Standard 和 Express 版本。 这些版本已获得生产使用许可。 如需 Enterprise 和 Standard 版本,请联系软件供应商获取安装媒体。 你可以在 Microsoft 采购网站上找到采购信息和 Microsoft 合作伙伴目录。
有关哪些 SQL Server 版本支持将 Python 和 R 与机器学习服务集成的详细信息,请参阅 SQL Server 2017 的版本和受支持的功能。
有关哪些 SQL Server 版本支持将 Python 和 R 与机器学习服务集成的详细信息,请参阅 SQL Server 2019 的版本和受支持的功能。
运行安装程序
对于本地安装,必须以管理员身份运行安装程序。 如果从远程共享安装 SQL Server ,则必须使用对远程共享具有读取和执行权限的域帐户。
启动 SQL Server 的安装向导。
在“安装”选项卡上,选择“全新 SQL Server 独立安装或向现有安装添加功能” 。
在“功能选择” 页上,选择以下选项:
数据库引擎服务
若要将 R 和 Python 与 SQL Server 结合使用,则必须安装数据库引擎实例。 可使用默认实例或命名实例。
机器学习服务(数据库内)
此选项安装支持 R 和 Python 脚本执行的数据库服务。
数据库引擎服务
若要将 R 或 Python 与 SQL Server 结合使用,则必须安装数据库引擎实例。 可使用默认实例或命名实例。
机器学习服务和语言扩展
此选项安装支持 R 和 Python 脚本执行的数据库服务。
R
选择此选项可添加 Microsoft R 包、解释器和开源 R。
Python
选择此选项可添加 Microsoft Python 包、Python 3.5 可执行文件以及从 Anaconda 分发中选择库。
有关安装和使用 Java 的信息,请参阅在 Windows 上安装 SQL Server Java 语言扩展。
注意
不要选择“共享功能”下的“机器学习服务器(独立)”选项。 该选项适用于单独的计算机。
在“同意安装 Microsoft R Open”页上,选择“接受”>“下一步”。
许可协议涵盖以下内容:
- Microsoft R Open。
- 开放源代码 R 基本包和工具。
- Microsoft 开发团队提供的增强 R 包和连接提供程序。
在“同意安装 Python”页上,选择“接受”>“下一步”。 Python 开源许可协议还涵盖了 Anaconda 和相关工具,以及 Microsoft 开发团队提供的一些新 Python 库。
注意
如果正在使用的计算机无法访问 Internet,则可以在此时暂停安装以单独下载安装程序。 有关详细信息,请参阅在没有 Internet 连接的情况下安装机器学习组件。
在“准备安装”页面上,验证是否已包括这些选择,然后选择“安装”:
- 数据库引擎服务
- 机器学习服务(数据库内)
- R、Python 或两者
请注意配置文件存储路径
..\Setup Bootstrap\Log
下的文件夹位置。 安装完成后,可以在“摘要”文件中查看已安装的组件。安装完成后,如果收到重启计算机的指示,请重启。 安装完成后,请务必阅读来自安装向导的消息。 有关详细信息,请参阅查看和读取 SQL Server 安装程序日志文件。
在“同意安装 Microsoft R Open”页上,选择“接受”>“下一步”。 该许可协议涵盖 Microsoft R Open,其中包括分发开源 R 基础包和工具。 还包括 Microsoft 开发团队提供的增强 R 包和连接提供程序。
在“同意安装 Python”页上,选择“接受”>“下一步”。 Python 开源许可协议还涵盖了 Anaconda 和相关工具,以及 Microsoft 开发团队提供的一些新 Python 库。
在“准备安装”页面上,验证是否已包括这些选择,然后选择“安装”:
- 数据库引擎服务
- 机器学习服务(数据库内)
- R、Python 或两者
请注意配置文件存储路径
..\Setup Bootstrap\Log
下的文件夹位置。 安装完成后,可以在“摘要”文件中查看已安装的组件。安装完成后,如果收到重启计算机的指示,请重启。 安装完成后,请务必阅读来自安装向导的消息。 有关详细信息,请参阅查看和读取 SQL Server 安装程序日志文件。
设置环境变量。
(仅适用于 R 功能集成)应设置 MKL_CBWR
环境变量,以确保从 Intel 数学核心函数库 (MKL) 计算得到一致的输出结果:
在控制面板中,选择“系统和安全”>“系统”>“高级系统设置”>“环境变量”。
创建新的用户或系统变量:
- 将变量名称设置为
MKL_CBWR
。 - 将变量值设置为
AUTO
。
- 将变量名称设置为
此步骤需要重启服务器。 如果要启用脚本执行,则可以在完成所有配置工作之前暂停重启。
启用脚本执行
使用 SQL Server Management Studio (SSMS) 或 Azure Data Studio,连接到安装 SQL Server 机器学习服务的实例。
选择“新建查询”打开查询窗口,然后运行以下命令:
EXEC sp_configure
属性
external scripts enabled
的值目前应为0
。 默认情况下,此功能处于关闭状态。 若要打开它以便运行 R 或 Python 脚本,请运行以下语句:EXEC sp_configure 'external scripts enabled', 1 RECONFIGURE WITH OVERRIDE
如果已为 R 语言启用此功能,则不需要对 Python 再次运行
RECONFIGURE
。 基础扩展性平台支持这两种语言。
重新启动服务。
安装完成后,重启数据库引擎。 重启服务也会自动重启相关的 SQL Server Launchpad 服务。
可以使用以下任一方法重启服务:
- SSMS 对象资源管理器中实例的右键单击“重启”命令
- 控制面板中的服务 Microsoft 管理控制台 (MMC) 项
- SQL Server 配置管理器
验证安装
使用以下步骤验证用于启动外部脚本的所有组件是否都在运行:
在 SQL Server Management Studio 中打开新的“查询”窗口,然后运行以下命令:
EXECUTE sp_configure 'external scripts enabled'
然后,将
run_value
设置为1
。打开“服务”控制面板项或 SQL Server 配置管理器,并验证“SQL Server Launchpad”是否正在运行。 应该为每个安装了 R 或 Python 的数据库引擎实例提供一项服务。 有关该服务的详细信息,请参阅 SQL Server 机器学习服务中的扩展性体系结构。
如果 Launchpad 正在运行,则可以运行简单的 Python 和 R 脚本,以验证外部脚本运行时是否可以与 SQL Server 通信。
在 SQL Server Management Studio 中打开新的“查询”窗口,然后运行如下脚本:
对于 R:
EXEC sp_execute_external_script @language =N'R', @script=N' OutputDataSet <- InputDataSet; ', @input_data_1 =N'SELECT 1 AS hello' WITH RESULT SETS (([hello] int not null)); GO
Python 模型:
EXEC sp_execute_external_script @language =N'Python', @script=N' OutputDataSet = InputDataSet; ', @input_data_1 =N'SELECT 1 AS hello' WITH RESULT SETS (([hello] int not null)); GO
如果是首次加载外部脚本运行时,则该脚本可能需要一些时间才能运行。 结果应如下所示:
Hello 1
注意
不会自动返回 Python 脚本中使用的列或标题。 若要在输出结果中添加列名称,则必须为返回数据集指定架构。 为此,请使用存储过程的 WITH RESULTS
参数,命名列并指定 SQL 数据类型。
例如,可以添加以下行来生成任意列名:WITH RESULT SETS ((Col1 AS int))
。
应用更新
现有安装
如果已将机器学习服务添加到现有 SQL Server 实例,并且之前应用了累积更新 (CU),则数据库引擎版本和机器学习服务功能可能会有所不同。 这种差异可能会导致意外行为或错误,因为 launchpad.exe
和 sqlservr.exe
的版本不同。
执行以下步骤,将机器学习服务引入与数据库引擎相同的版本:
确定用于数据库引擎的累积更新。 运行此 T-SQL 语句:
SELECT @@VERSION
下面是 SQL Server 2019 CU 8 的输出示例:
Microsoft SQL Server 2019 (RTM-CU8-GDR) (KB4583459) - 15.0.4083.2 (X64) Nov 2 2020 18:35:09 Copyright (C) 2019 Microsoft Corporation Developer Edition (64-bit) on Windows 10 Enterprise 10.0 (X64) (Build 19042: ) (Hypervisor)
有关详细信息,请参阅确定 SQL Server 及其组件的版本、版本类别和更新级别。
如有必要,请下载已为数据库引擎安装的累积更新。
运行以安装累积更新,并按照说明再次安装机器学习服务的累积更新。 选择安装了机器学习服务的现有实例。 升级状态将在“功能选择”页上显示“未完全安装”。
选择“下一步”并继续安装。
新安装
如果在 SQL Server 数据库引擎的新安装中安装机器学习服务,建议将最新累积更新应用于数据库引擎和机器学习组件。
在连接 Internet 的设备上,通常是通过 Windows 更新应用累积更新。 但你也可以使用以下步骤进行受控更新。 为数据库引擎应用更新时,安装程序将为你在同一实例上安装的任何 Python 或 R 功能拉取累积更新。
断开连接的服务器需要执行额外的步骤。 有关详细信息,请参阅 在没有 Internet 连接的计算机上安装 > 应用累积更新。
开始使用已安装的基线实例:SQL Server 初始版本。
选择最新的累积更新。 自动下载并提取可执行文件。
运行设置并接受许可条款。
在“功能选择”页上,查看应用了累积更新的功能。 应看到为当前实例安装的每个功能,包括机器学习功能。 安装程序会下载更新所有功能所需的 CAB 文件。
在向导中继续操作。 接受 R 和 Python 发行版的许可条款。
其他配置
如果外部脚本验证步骤成功,则可以从 SQL Server Management Studio、Visual Studio Code 或者能够向服务器发送 T-SQL 语句的其他任何客户端运行 R 或 Python 命令。
如果在运行命令时遇到错误,可能需要对服务或数据库进行额外的配置。 在实例级别,其他配置可能包括:
- 为 SQL Server 机器学习服务配置防火墙
- 启用其他网络协议
- 启用远程连接
- 为 SQLRUserGroup 创建登录名
- 管理磁盘配额以防止外部脚本运行耗尽磁盘空间的任务
在 Windows 上的 SQL Server 2019 中,隔离机制已发生更改。 此机制会影响 SQLRUserGroup、防火墙规则、文件权限和默示身份验证。 有关详细信息,请参阅 机器学习服务的隔离更改。
在数据库上,可能需要配置更新。 有关详细信息,请参阅向用户授予 SQL Server 机器学习服务的权限。
注意
是否需要其他配置取决于安全架构、SQL Server 的安装位置,以及期望用户以何方式连接到数据库和运行外部脚本。
建议的优化
现在所有工作已顺利进行,可能还需要优化服务器以支持机器学习,或安装预先训练的机器学习模型。
添加更多辅助角色帐户
如果预期会有很多用户同时运行脚本,则可以增加分配给 Launchpad 服务的辅助角色帐户数目。 有关详细信息,请参阅在 SQL Server 机器学习服务中扩展外部脚本的并发执行。
优化服务器执行脚本
SQL Server 安装程序的默认设置旨在为各种其他服务和应用程序优化服务器的均衡。
在默认设置下,机器学习(尤其是占用大量内存的操作)的资源有时会被限制或被阻止。
若要确保机器学习作业的优先级并为其分配适当资源,建议使用 SQL Server Resource Governor 配置外部资源池。 可能还要更改分配到 SQL Server 数据库引擎的内存量,或增加 SQL Server Launchpad 服务下运行的帐户数。
要配置用于管理外部资源的资源池,请参阅创建外部资源池。
若要更改为数据库保留的内存量,请参阅服务器内存配置选项。
若要更改 SQL Server Launchpad 可以启动的 R 帐户数,请参阅在 SQL Server 机器学习服务中缩放外部脚本的并发执行。
如果使用的是 Standard Edition 且没有 Resource Governor,则可以使用动态管理视图、SQL Server 扩展事件和 Windows 事件监视来帮助管理服务器资源。
安装其他 Python 和 R 包
为 SQL Server 创建的 Python 和 R 解决方案可以调用:
- 基本函数。
- 随 SQL Server 一起安装的专有包中的函数。
- 与 SQL Server 安装的开源 Python 和 R 版本兼容的第三方包。
要通过 SQL Server 使用的包必须安装在实例使用的默认库中。 如果在计算机上单独安装了 Python 或 R,或者将包安装到了用户库,则无法从 T-SQL 使用这些包。
若要安装和管理其他包,可以将用户组设置为共享每个数据库级别的包,或者通过配置数据库角色使用户能够安装自己的包。 有关详细信息,请参阅安装 Python 包和安装新的 R 包。
后续步骤
Python 开发人员可以通过以下教程了解如何将 Python 与 SQL Server 一起使用:
R 开发人员可以开始使用一些简单的示例,并了解 R 如何与 SQL Server 协同工作的基础知识。 有关下一步,请参阅以下链接: