在 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 功能新增至現有的獨立執行個體,但無法只安裝 Python 或 R 功能。
針對商務持續性,機器學習服務支援 Always On 可用性群組。 在每個節點上安裝機器學習服務,並設定套件。
在 SQL Server 2017 中,「不支援」在 Always On 容錯移轉叢集執行個體上安裝機器學習服務。 但 SQL Server 2019 和更新版本支援。 您必須在安裝時安裝 Machine Learning Services,且安裝之後,功能就無法新增至現有的容錯移轉叢集執行個體。
請勿在網域控制站上安裝機器學習服務。 安裝程式的機器學習服務部分將會失敗。
不要在執行資料庫執行個體的同一部電腦上安裝 [共用功能]>[Machine Learning 伺服器 (獨立式)]。 獨立伺服器將會競爭相同資源,並降低這兩個安裝的效能。
支援與其他版本的 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 作業所需的帳戶。 設定變更通常需要重新啟動執行個體,或將啟動控制板服務重新啟動。
取得安裝媒體
SQL Server 的下載位置因版本而異:
SQL Server Enterprise、Standard 和 Express Edition。 這些版本已獲得生產環境使用授權。 對於 Enterprise Edition 和 Standard Edition,請連絡您的軟體廠商以取得安裝媒體。 購買資訊和 Microsoft 合作夥伴目錄請見 Microsoft 購買網站。
如需哪些 SQL Server 版本支援與機器學習服務之 Python 和 R 整合的詳細資訊,請參閱 SQL Server 2017 的版本及支援功能。
如需哪些 SQL Server 版本支援與機器學習服務之 Python 和 R 整合的詳細資訊,請參閱 SQL Server 2019 的版本及支援功能。
執行安裝程式
針對本機安裝,您必須以系統管理員身分執行安裝程式。 如果您是從遠端共用位置安裝 SQL Server,則必須使用對遠端共用位置具有讀取和執行權限的網域帳戶。
啟動 SQL Server 的安裝精靈。
在 [安裝] 索引標籤上,選取 [新增 SQL Server 獨立安裝或將功能加入至現有安裝] 。
在 [特徵選取] 頁面上,選取下列選項:
Database Engine 服務
若要搭配 SQL Server 使用 R 和 Python,您必須安裝資料庫引擎的執行個體。 您可以使用預設執行個體或具名執行個體。
Machine Learning Services (資料庫內)
此選項會安裝支援 R 和 Python 指令碼執行的資料庫服務。
Database Engine 服務
若要搭配 SQL Server 使用 R 或 Python,您必須安裝資料庫引擎的執行個體。 您可以使用預設執行個體或具名執行個體。
機器學習服務和語言延伸模組
此選項會安裝支援 R 和 Python 指令碼執行的資料庫服務。
R
選取此選項可新增 Microsoft R 套件、解譯器和開放原始碼 R。
Python
選取此選項可新增 Microsoft Python 套件、Python 3.5 可執行檔,以及從 Anaconda 發行版本中選取程式庫。
如需安裝和使用 Java 的相關資訊,請參閱在 Windows 上安裝 SQL Server Java 語言延伸模組。
注意
請勿在 [共用功能] 底下選取 [Machine Learning 伺服器 (獨立式)] 選項。 該選項適用於個別的電腦。
在 [同意安裝 Microsoft R Open] 頁面上,選取 [接受]>[下一步]。
授權合約涵蓋:
- Microsoft R Open。
- 開放原始碼 R 基底套件與工具。
- Microsoft 開發小組所提供的增強型 R 套件與連線提供者。
在 [同意安裝 Python] 頁面上,選取 [接受]>[下一步]。 Python 開放原始碼授權合約也涵蓋 Anaconda 和相關工具,以及 Microsoft 開發小組提供的一些新 Python 程式庫。
注意
如果您使用的電腦無法存取網際網路,則此時可以暫停安裝,以個別下載安裝程式。 如需詳細資訊,請參閱在沒有網際網路存取的情況下安裝機器學習元件。
在 [準備安裝] 頁面上,確認包含這些選取項目,然後選取 [安裝]:
- Database Engine 服務
- 機器學習服務 (資料庫內)
- R、Python 或兩者
請注意組態檔儲存所在資料夾 (路徑
..\Setup Bootstrap\Log
底下) 的位置。 當安裝程式完成時,您可以在摘要檔案中檢閱已安裝的元件。當安裝程式完成之後,如果系統指示您重新啟動電腦,請重新啟動。 當您完成安裝時,請務必閱讀安裝精靈提供的訊息。 如需詳細資訊,請參閱檢視與讀取 SQL Server 安裝程式記錄檔。
在 [同意安裝 Microsoft R Open] 頁面上,選取 [接受]>[下一步]。 此授權合約涵蓋 Microsoft R Open,其中包含開放原始碼 R 基底套件與工具的發行版本。 其也包含 Microsoft 開發小組提供的增強型 R 套件與連線提供者。
在 [同意安裝 Python] 頁面上,選取 [接受]>[下一步]。 Python 開放原始碼授權合約也涵蓋 Anaconda 和相關工具,以及 Microsoft 開發小組提供的一些新 Python 程式庫。
在 [準備安裝] 頁面上,確認包含這些選取項目,然後選取 [安裝]:
- Database Engine 服務
- 機器學習服務 (資料庫內)
- R、Python 或兩者
請注意組態檔儲存所在資料夾 (路徑
..\Setup Bootstrap\Log
底下) 的位置。 當安裝程式完成時,您可以在摘要檔案中檢閱已安裝的元件。當安裝程式完成之後,如果系統指示您重新啟動電腦,請重新啟動。 當您完成安裝時,請務必閱讀安裝精靈提供的訊息。 如需詳細資訊,請參閱檢視與讀取 SQL Server 安裝程式記錄檔。
設定環境變數
僅針對 R 功能整合,您應該設定 MKL_CBWR
環境變數,以確保來自 Intel Math Kernel Library (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 Management Console (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 機器學習服務中的擴充性架構。
如果啟動控制板正在執行,您就能執行簡單的 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 及其元件的版本 (Version)、版次 (Edition) 及更新層級。
如有必要,請下載您為資料庫引擎安裝的累積更新。
執行累積更新的安裝,並依照指示再次針對機器學習服務進行安裝。 選取機器學習服務安裝所在的現有執行個體。 升級狀態會顯示 [特徵選取] 頁面上的 [安裝不完整]。
選取 [下一步] 並繼續安裝。
新的安裝
如果您使用新的 SQL Server 資料庫引擎安裝來安裝機器學習服務,建議您將最新的累積更新同時套用到資料庫引擎和機器學習元件。
在連線到網際網路的裝置上,累積更新通常會透過 Windows Update 套用。 但您也可以針對受控制的更新使用下列步驟。 當您套用資料庫引擎的更新時,安裝程式會針對您安裝在相同執行個體上的任何 Python 或 R 功能提取累積更新。
中斷連線的伺服器需要額外的步驟。 如需詳細資訊,請參閱在沒有網際網路存取的電腦上安裝 > 套用累積更新。
從已經安裝的基準執行個體開始: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 資源管理員設定外部資源集區。 您也可以變更配置給 SQL Server 資料庫引擎的記憶體數量,或增加在 SQL Server Launchpad 服務下執行的帳戶數目。
若要設定用來管理外部資源的資源集區,請參閱建立外部資源集區。
若要變更為資料庫保留的記憶體量,請參閱伺服器記憶體設定選項。
若要變更 SQL Server Launchpad 可啟動的 R 帳戶數目,請參閱在 SQL Server 機器學習服務中調整外部指令碼的同時執行。
如果您使用的是 Standard 版本且沒有 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 使用的基本概念。 如需下一個步驟,請參閱下列連結: