在 Windows 上安裝 SQL Server 2022 機器學習服務 (Python 和 R)

適用於:SQL Server 2022 (16.x) 和更新版本

本文說明如何在 Windows 上安裝 SQL Server 機器學習服務與 Python 和 R 。 透過機器學習服務,你可以在資料庫中執行 Python 和 R 腳本。

注意

這些指示僅適用於 Windows 上的 SQL Server 2022 (16.x)。 若要在 Windows 上為 SQL Server 2016 (13.x)、SQL Server 2017 (14.x) 或 SQL Server 2019 (15.x) 安裝 SQL Server 機器學習服務,請參閱在 Windows 上安裝 SQL Server 機器學習服務 (Python 和 R)。

針對Linux,請參閱在Linux上安裝SQL Server 2019 機器學習服務 (Python 和 R)。

預安裝檢查清單

  • 需要資料庫引擎執行個體。 雖然您能以累加方式將 Python 或 R 功能新增至現有的執行個體,但無法只安裝 Python 或 R 功能。

  • 針對商務持續性,機器學習服務支援 Always On 可用性群組。 在每個節點上安裝機器學習服務,並設定套件。

  • 在 SQL Server 2019 和更新版本中的 Always On 故障轉移叢集實例上,也支援安裝機器學習服務。

  • 請勿在網域控制站上安裝機器學習服務。 安裝程式的機器學習服務部分將會失敗。

  • 支援與其他版本的 Python 和 R 並存安裝,但我們不建議這麼做。 支援的原因是因為 SQL Server 執行個體使用自己的開放原始碼 R 和 Anaconda 發行版本複本。 不建議這麼做是因為在 SQL Server 外部的電腦上執行使用 Python 與 R 的程式碼,可能會導致問題發生:

    • 使用不同的程式庫與不同的可執行檔所產生的結果,將與您在 SQL Server 中執行的結果不一致。
    • SQL Server 無法管理在外部程式庫中執行的 R 和 Python 指令碼,因而導致資源爭用。

重要

完成安裝後,請務必完成本文所說明的設定後步驟。 這些步驟可能包括讓 SQL Server 能夠使用外部指令碼。 設定變更通常需要重新啟動執行個體,或將啟動控制板服務重新啟動。

取得安裝媒體

SQL Server 的下載位置因版本而異:

  • SQL Server Enterprise、Standard 和 Express Edition。 這些版本已獲得生產環境使用授權。 對於 Enterprise Edition 和 Standard Edition,請連絡您的軟體廠商以取得安裝媒體。 購買資訊和 Microsoft 合作夥伴目錄請見 Microsoft 購買網站。

  • 最新的免費版本。

關於 SQL Server 版本所支援的功能清單,請參見 SQL Server 2022 的版本與支援功能。

執行安裝程式

針對本機安裝,您必須以系統管理員身分執行安裝程式。 如果您是從遠端共用位置安裝 SQL Server,則必須使用對遠端共用位置具有讀取和執行權限的網域帳戶。

如果在安裝期間發生任何安裝錯誤,請檢查安裝程式啟動程序記錄資料夾中的摘要記錄 (例如 %ProgramFiles%\Microsoft SQL Server\160\Setup Bootstrap\Log\Summary.txt)。

  1. 啟動 SQL Server 2022 安裝程式精靈。

  2. 在 [安裝] 索引標籤上,選取 [新增 SQL Server 獨立安裝或將功能加入至現有安裝] 。

  3. 在 [特徵選取] 頁面上,選取下列選項:

    • 資料庫引擎 服務

      若要搭配 SQL Server 使用 R 或 Python,您必須安裝資料庫引擎的執行個體。 您可以選擇使用預設執行個體或具名執行個體。

    • 機器學習服務和語言

      此選項會安裝支援 R 和 Python 指令碼執行的資料庫服務。

    此螢幕擷取畫面顯示您安裝 SQL Server 2022 (16.x) 機器學習服務時所要檢查的最低執行個體功能。

    特徵選取的螢幕擷取畫面,其中顯示 [資料庫引擎服務] 與 [機器學習服務和語言] 旁的核取方塊。

安裝執行階段和套件

從 SQL Server 2022 (16.x) 開始,R、Python 和 Java 的執行階段將不再隨 SQL Server 安裝程式一起提供或安裝。 請使用以下幾節的說明來安裝自訂執行階段和套件。

設定 R 支援

安裝 R 執行階段

  1. 下載並安裝最新版本的 R 4.2 for Windows。

  2. 安裝 CompatibilityAPI 和 RevoScaleR 的相依性。 從已安裝版本的 R 終端,執行下列命令:

    # R Terminal
    install.packages("iterators")
    install.packages("foreach")
    install.packages("R6")
    install.packages("jsonlite")
    
  3. 下載並安裝最新版的 CompatibilityAPI 和 RevoScaleR 套件:

    install.packages("https://aka.ms/sqlml/r4.2/windows/CompatibilityAPI_1.1.0.zip", repos=NULL)
    
    install.packages("https://aka.ms/sqlml/r4.2/windows/RevoScaleR_10.0.1.zip", repos=NULL)
    

使用 SQL Server 設定 R 執行階段

  1. 使用 SQL Server 設定已安裝的 R 執行階段。 您可以使用 RegisterRext.exe 命令列公用程式來變更預設版本。 公用程式位於 R 應用程式資料夾中,具體取決於安裝。 通常位於 %ProgramFiles%\R\R-4.2.3\library\RevoScaleR\rxLibs\x64 中。

    您可以使用下列指令碼,從 RegisterRext.exe 的安裝資料夾位置設定已安裝的 R 執行階段。 執行個體名稱是 MSSQLSERVER (若是 SQL Server 的預設執行個體),或 SQL Server 具名執行個體的執行個體名稱。

    .\RegisterRext.exe /configure /rhome:"%ProgramFiles%\R\R-4.2.3" /instance:"MSSQLSERVER"
    

    如果您要設定通常稱為 「.\SQLEXPRESS」 或 「MACHINENAME\SQLEXPRESS」 的 SQL Server 具名實例,則只包含實例名稱。 例如:

    .\RegisterRext.exe /configure /rhome:"%ProgramFiles%\R\R-4.2.3" /instance:"SQLEXPRESS"
    
  2. 使用 SQL Server Management Studio(SSMS) 連接到你安裝 SQL Server 機器學習 Services 的實例。 選取 [新增查詢] 以開啟查詢視窗,然後執行下列命令以啟用外部指令碼功能:

    EXEC sp_configure  'external scripts enabled', 1;
    RECONFIGURE WITH OVERRIDE
    

    如果您已為另一種語言啟用此功能,就不需要為 R 再次執行 RECONFIGURE。基礎擴充性平台支援這兩種語言。 若要驗證,請確認下列命令會傳回 1,針對 config_value 和 run_value:

    EXEC sp_configure  'external scripts enabled';
    
  3. 重新啟動 SQL Server 服務。 重新啟動該服務也會自動重新啟動相關的 SQL Server Launchpad 服務。

    您可以針對 SSMS 物件總管中的執行個體,使用滑鼠右鍵按一下 [重新啟動] 命令,或使用 [控制台] 中的 [服務] 項目,或使用 SQL Server 組態管理員來重新啟動服務。

  4. 執行簡單的 T-SQL 命令傳回 R 的版本,以驗證安裝:

    EXEC sp_execute_external_script @script=N'print(R.version)',@language=N'R';
    GO
    

設定 Python 支援

安裝 Python 執行階段

  1. 下載最新版的 Python 3.10 for Windows。 使用下列選項加以安裝:

    1. 開啟 Python 安裝應用程式,然後選取 [自訂安裝]。

    2. 確認已選取 [為所有使用者安裝啟動器 (建議)] 核取方塊。

    3. 針對 [選用功能],選取您想要的功能 (或選取所有功能)。

    4. 在 [進階選項] 頁面上,選取 [為所有使用者安裝]、接受其他預設選項,然後選取 [安裝]。

      建議使用所有使用者都可存取的 Python 安裝路徑 (例如 C:\Program Files\Python310),而不是單一使用者專屬的安裝路徑。

  2. 建立一個包含以下內容的文字檔,並儲存為 C:\Program Files\Python310\constraints.txt:

    dill==0.3.4
    numpy==1.22.0
    pandas==1.3.5
    patsy==0.5.2
    python-dateutil==2.8.2
    
  3. 從新的升格命令提示字元下載並安裝最新版本的 revoscalepy 套件及其相依。 傳遞 constraints.txt 前一步建立的檔案:

    cd "C:\Program Files\Python310\"
    python -m pip install -t "C:\Program Files\Python310\Lib\site-packages" -c "C:\Program Files\Python310\constraints.txt" dill numpy pandas patsy python-dateutil packaging https://aka.ms/sqlml/python3.10/windows/revoscalepy-10.0.1-py3-none-any.whl
    
  4. 執行以下 icacls 命令,以授予安裝的函式庫 READ 和 EXECUTE 存取權給 SQL Server Launchpad Service 和 SID S-1-15-2-1 (ALL_APPLICATION_PACKAGES)。 你需要授權與 Launchpad 服務相關的服務帳號權限。 請到 SQL Server 配置管理員查看。

    icacls "C:\Program Files\Python310\Lib\site-packages" /grant "NT Service\MSSQLLAUNCHPAD":(OI)(CI)RX /T
    icacls "C:\Program Files\Python310\Lib\site-packages" /grant *S-1-15-2-1:(OI)(CI)RX /T
    

    如果您將 SQL Server 安裝為具名實例,服務帳戶可能會在中間有 $ ,例如:

    icacls "C:\Program Files\Python310\Lib\site-packages" /grant "NT Service\MSSQLLAUNCHPAD$SQLEXPRESS":(OI)(CI)RX /T
    icacls "C:\Program Files\Python310\Lib\site-packages" /grant *S-1-15-2-1:(OI)(CI)RX /T
    

使用 SQL Server 設定 Python 執行階段

  1. 使用 SQL Server 設定已安裝的 Python 執行階段。 您可以使用 RegisterRext.exe 命令列公用程式來變更預設版本。 公用程式位於自訂安裝位置 (例如 C:\Program Files\Python310\Lib\site-packages\revoscalepy\rxLibs)。

    透過提升權限的命令提示字元,您可以使用下列指令碼,從 RegisterRext.exe 的安裝資料夾位置設定已安裝的 Python 執行階段。 執行個體名稱是 MSSQLSERVER (若是 SQL Server 的預設執行個體),或 SQL Server 具名執行個體的執行個體名稱。

    cd "C:\Program Files\Python310\Lib\site-packages\revoscalepy\rxLibs"
    .\RegisterRext.exe /configure /pythonhome:"C:\Program Files\Python310" /instance:"MSSQLSERVER"
    

    如果您要設定通常稱為 「.\SQLEXPRESS」 或 「MACHINENAME\SQLEXPRESS」 的 SQL Server 具名實例,則只包含實例名稱。 例如:

    cd "C:\Program Files\Python310\Lib\site-packages\revoscalepy\rxLibs"
    .\RegisterRext.exe /configure /pythonhome:"C:\Program Files\Python310" /instance:"SQLEXPRESS"
    
  2. 使用 SQL Server Management Studio(SSMS) 連接到你安裝 SQL Server 機器學習 Services 的實例。 選取 [新增查詢] 以開啟查詢視窗,然後執行下列命令以啟用外部指令碼功能:

    EXEC sp_configure  'external scripts enabled', 1;
    RECONFIGURE WITH OVERRIDE
    

    如果您已為另一種語言啟用此功能,就不需要為 R 再次執行 RECONFIGURE。基礎擴充性平台支援這兩種語言。 若要驗證,請確認下列命令會傳回 1,針對 config_value 和 run_value:

    EXEC sp_configure  'external scripts enabled';
    
  3. 重新啟動 SQL Server 服務。 重新啟動該服務也會自動重新啟動相關的 SQL Server Launchpad 服務。

    您可以針對 SSMS 物件總管中的執行個體,使用滑鼠右鍵按一下 [重新啟動] 命令,或使用 [控制台] 中的 [服務] 項目,或使用 SQL Server 組態管理員來重新啟動服務。

  4. 執行簡單的命令傳回 Python 的版本,以驗證安裝:

    EXEC sp_execute_external_script @script=N'import sys;print(sys.version)',@language=N'Python'
    GO
    

安裝 Java

如需安裝及使用 Java 的相關資訊,請參閱在 Windows 上安裝 SQL Server Java 語言延伸模組。

其他設定

如果外部指令碼驗證步驟成功,您就可以從 SQL Server Management Studio、Visual Studio Code,或任何可以將 T-SQL 陳述式傳送到伺服器的其他用戶端來執行 R 或 Python 命令。

是否需要其他設定取決於您的安全性結構描述、SQL Server 的安裝位置,以及您預期使用者如何連線至資料庫並執行外部指令碼。

如果在執行命令時發生錯誤,您可能需要對服務或資料庫進行其他設定。 在執行個體層級,其他設定可能包括:

從 Windows 上的 SQL Server 2019 開始,隔離機制已有所變更。 此機制會影響 SQLRUserGroup、防火牆規則、檔案權限,以及隱含驗證。 如需詳細資訊,請參閱 Windows 上的 SQL Server:機器學習服務的隔離變更。

在資料庫上,您可能需要設定更新。 如需詳細資訊,請參閱 使用 SQL Server 機器學習服務授與資料庫使用者執行 Python 和 R 腳本的許可權。

建議的最佳化

既然您一切正常運作,您可能也想要將伺服器優化以支援機器學習,或安裝預先定型的機器學習模型。

最佳化伺服器以執行指令碼

SQL Server 安裝程式的預設設定旨在針對各種其他服務和應用程式優化伺服器的平衡。

在預設設定下,機器學習的資源有時會受到限制或已進行節流處理,尤其是需要大量記憶體的作業。

為確保機器學習優先處理且獲得適當的資源,建議您使用 SQL Server 資源管理員設定外部資源集區。 您也可以變更配置給 SQL Server 資料庫引擎的記憶體數量,或增加在 SQL Server Launchpad 服務下執行的帳戶數目。

如果您使用的是 Standard 版本且沒有 Resource Governor,可以利用動態管理檢視、SQL Server 擴充事件和 Windows 事件監視來協助管理伺服器資源。

安裝額外的 Python 和 R 套件

您為 SQL Server 建立的 Python 和 R 解決方案可以呼叫:

  • 基本功能。
  • 隨 SQL Server 安裝的專屬套件中的函數。
  • 與 SQL Server 安裝的開放原始碼 Python 和 R 版本相容的第三方套件。

您想要從 SQL Server 使用的套件,必須安裝在執行個體所使用的預設程式庫中。 如果您已個別在電腦上安裝 Python 或 R,或者如果您將套件安裝到使用者程式庫,則無法從 T-SQL 使用那些套件。

若要安裝及管理其他套件,您可以設定使用者群組,以在個別資料庫層級共用套件。 或者,您可以設定資料庫角色,讓使用者能夠安裝自己的套件。 如需詳細資訊,請參閱 使用 sqlmlutils 安裝 R 套件。

適用於 Python 和 R 執行階段的獨立 RevoScale 套件

RevoScale 套件也支援作為 Python 和 R 運行環境的獨立套件。 若要為獨立案例安裝 Python 或 R 執行階段,請分別依照安裝 Python 執行階段和安裝 R 執行階段小節中的指示操作。