Sbírejte data pro řešení Python a R skriptů pomocí SQL Server Machine Learning Services

platí pro: SQL Server 2016 (13.x) a novější verze

Important

Podpora pro Machine Learning Server (dříve označovaný jako R Server) skončila 1. července 2022. Další informace najdete v tématu Co se děje se službou Machine Learning Server?

Tento článek popisuje, jak shromáždit data, která potřebujete, když se snažíte řešit problémy v SQL Server Machine Learning Services. Tato data mohou být užitečná, ať už řešíte problémy sami, nebo s pomocí zákaznické podpory Microsoft.

Verze a edice SQL Server

SQL Server 2016 R Services je první verze SQL Server, která zahrnuje integrovanou podporu R. SQL Server 2016 Service Pack 1 (SP1) obsahuje několik zásadních vylepšení, včetně možnosti spouštět externí skripty. Pokud používáte SQL Server 2016, měli byste zvážit instalaci SP1 nebo novějšího.

SQL Server 2017 a pozdější mají integraci s jazykem Python. V dřívějších verzích nelze získat integraci funkcí Python.

V závislosti na edici SQL Server, kterou používáte, může být některá funkce strojového učení nedostupná nebo omezená.

Jazyk R a verze nástrojů

Obecně platí, že verze Microsoft R, která se nainstaluje při výběru funkce R Services nebo funkce Machine Learning Services, je určena číslem sestavení SQL Server. Pokud aktualizujete nebo opravujete SQL Server, musíte také aktualizovat nebo opravit jeho R komponenty.

Pro seznam vydání a odkazy na stažení komponent R viz Instalace komponent strojového učení bez přístupu k internetu. Na počítačích s přístupem k internetu je požadovaná verze R automaticky identifikována a nainstalována.

Je možné upgradovat komponenty R Serveru samostatně od databázového enginu SQL Server, v procesu zvaném binding. Proto se verze R, kterou používáte při spuštění R kódu v SQL Server, může lišit v závislosti na instalované verzi SQL Server a na tom, zda jste server migrovali na nejnovější verzi R.

Určte verzi R

Nejjednodušší způsob, jak určit verzi R, je získat vlastnosti v běhu spuštěním příkazu, jako je následující:

EXECUTE sp_execute_external_script
       @language = N'R'
       , @script = N'
# Transform R version properties to data.frame
OutputDataSet <- data.frame(
  property_name = c("R.version", "Revo.version"),
  property_value = c(R.Version()$version.string, Revo.version$version.string),
  stringsAsFactors = FALSE)
# Retrieve properties like R.home, libPath & default packages
OutputDataSet <- rbind(OutputDataSet, data.frame(
  property_name = c("R.home", "libPaths", "defaultPackages"),
  property_value = c(R.home(), .libPaths(), paste(getOption("defaultPackages"), collapse=", ")),
  stringsAsFactors = FALSE)
)
'
WITH RESULT SETS ((PropertyName nvarchar(100), PropertyValue nvarchar(4000)));

Tip

Pokud R Services nefunguje, zkuste spustit pouze část R skriptů z RGui.

Jako poslední možnost můžete na serveru otevřít soubory a zjistit nainstalovanou verzi. K tomu najděte soubor rlauncher.config a získáte polohu runtime R a aktuální pracovní adresář. Doporučujeme vytvořit a otevřít kopii souboru, abyste omylem nezměnili žádné vlastnosti.

  • SQL Server 2016

    C:\Program Files\Microsoft SQL Server\MSSQL13.<instance_name\MSSQL\Binn\rlauncher.config

  • SQL Server 2017

    C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Binn\rlauncher.config

Pro získání verzí R a RevoScaleR otevřete příkazový řádek v R nebo otevřete RGui spojené s instancí.

  • SQL Server 2016

    C:\Program Files\Microsoft SQL Server\MSSQL13.<instancename>\R_SERVICES\bin\x64\RGui.exe

  • SQL Server 2017

    C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\R_SERVICES\bin\x64\RGui.exe

Konzole R zobrazuje informace o verzi při startu. Například následující verze představuje výchozí konfiguraci pro SQL Server 2017:

*Microsoft R Open 3.3.3*

*The enhanced R distribution from Microsoft*

*Microsoft packages Copyright (C) 2017 Microsoft*

*Loading Microsoft R Server packages, version 9.1.0.*

Verze Pythonu

Existuje několik způsobů, jak získat Python verzi. Nejjednodušší způsob je spustit tento příkaz ze Management Studia nebo jiného SQL dotazovacího nástroje:

-- Get Python runtime properties:
exec sp_execute_external_script
       @language = N'Python'
       , @script = N'
import sys
import pkg_resources
OutputDataSet = pandas.DataFrame(
                    {"property_name": ["Python.home", "Python.version", "Revo.version", "libpaths"],
                    "property_value": [sys.executable[:-10], sys.version, pkg_resources.get_distribution("revoscalepy").version, str(sys.path)]}
)
'
with WITH RESULT SETS (SQL keywords) ((PropertyName nvarchar(100), PropertyValue nvarchar(4000)));

Pokud Machine Learning Services neběží, můžete zjistit nainstalovanou verzi Python podle pythonlauncher.config souboru. Doporučujeme vytvořit a otevřít kopii souboru, abyste omylem nezměnili žádné vlastnosti.

  1. Pouze pro SQL Server 2017: C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Log\ExtensibilityLog\pythonlauncher.config
  2. Získejte hodnotu pro PYTHONHOME.
  3. Získejte hodnotu aktuálního pracovního adresáře.

Note

Pokud jste nainstalovali Python i R v SQL Server 2017, pracovní adresář a pool worker účtů jsou sdíleny pro jazyky R a Python.

Máte nainstalováno více instancí R nebo Pythonu?

Zkontrolujte, zda je na počítači nainstalováno více než jedna kopie knihoven R. Tato duplikace může nastat, pokud:

  • Při nastavení vybíráte jak R Services (In-Database), tak R Server (samostatný).
  • Nainstalujete Microsoft R Client kromě SQL Server.
  • Jiná sada R knihoven byla nainstalována pomocí R Tools for Visual Studio, R Studio, Microsoft R Client nebo jiného R IDE.
  • Počítač hostuje více instancí SQL Server a více instancí využívá strojové učení.

Stejné podmínky platí i pro Python.

Pokud zjistíte, že je nainstalováno více knihoven nebo runtimeů, ujistěte se, že se objevují pouze chyby spojené s runtime Python nebo R, které používá instance SQL Server.

Původ chyb

Chyby, které vidíte při pokusu spustit R kód, mohou pocházet z kteréhokoli z následujících zdrojů:

  • databázový modul SQL Serveru, včetně uložené procedury sp_execute_external_script
  • Důvěryhodná služba Launchpad serveru SQL Server
  • Další komponenty rozšiřitelného rámce, včetně R a Python launcherů a satelitních procesů
  • Poskytovatelé, jako je Microsoft Open Database Connectivity (ODBC)
  • Jazyk R

Když se službou používáte poprvé, může být obtížné rozpoznat, které zprávy pocházejí z jakých služeb. Doporučujeme zachytit nejen přesný text zprávy, ale i kontext, ve kterém jste ji viděli. Všimněte si klientského softwaru, který používáte k spouštění strojového učení:

  • Používáte Management Studio? Externí aplikace?
  • Používáte R kód v vzdáleném klientovi, nebo přímo v uložené procedurě?

SQL Server logové soubory

Získejte nejnovější SQL Server ERRORLOG. Kompletní sada chybových logů se skládá ze souborů z následujícího výchozího adresáře logů:

  • SQL Server 2016

    C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\Log\ExtensibilityLog

  • SQL Server 2017

    C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2016\MSSQL\Log\ExtensibilityLog

Note

Přesný název složky se liší podle názvu instance.

Chyby vrácené sp_execute_external_script

Získejte kompletní text chyb, které se vrátí, pokud nějaké jsou, když spustíte příkaz sp_execute_external_script.

Abychom vyřadili problémy s R nebo Python, můžete spustit tento skript, který spustí runtime v R nebo Python a předává data tam a zpět.

Pro jazyk 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

Pro jazyk 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

Chyby generované frameworkem rozšiřitelnosti

SQL Server generuje samostatné logy pro runtime externího skriptovacího jazyka. Tyto chyby nejsou generovány jazykem Python ani R. Jsou generovány z rozšiřitelných komponent v SQL Server, včetně jazykově specifických launcherů a jejich satelitních procesů.

Tyto záznamy můžete získat z následujících výchozích míst:

  • SQL Server 2016

    C:\Program Files\Microsoft SQL Server\MSSQL13.<instance_name>\MSSQL\Log\ExtensibilityLog

  • SQL Server 2017

    C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Log\ExtensibilityLog

Note

Přesný název složky se liší podle názvu instance. Podle tvé konfigurace může být složka na jiném disku.

Například následující logovací zprávy souvisejí s rámcem rozšiřitelnosti:

  • Operace LogonUser se nezdařila pro uživatele MSSQLSERVER01

    To může znamenat, že pracovní účty, které spouštějí externí skripty, nemohou k instanci přistupovat.

  • InitializePhysicalUsersPool se nezdařilo

    Tato zpráva může znamenat, že vaše bezpečnostní nastavení brání nastavení vytvořit skupinu pracovních účtů potřebných pro spouštění externích skriptů.

  • Inicializace Security Context Manageru selhala

  • Inicializace Správce relace satelitu selhala

Systémové události

  1. Otevřete Windows Prohlížeč událostí a prohledejte v logu systémových událostí zprávy obsahující řetězec Launchpad.
  2. Otevřete soubor ExtLaunchErrorlog a hledejte řetězec ErrorCode. Zkontrolujte zprávu spojenou s ErrorCode.

Například následující zprávy jsou běžné systémové chyby související s rozšiřitelnostním rámcem SQL Server:

  • Služba SQL Server Launchpad (MSSQLSERVER) se nespustila kvůli následující chybě: <text>

  • Služba na žádost o spuštění nebo řízení nereagovala včas.

  • Během čekání na připojení služby SQL Server Launchpad (MSSQLSERVER) došlo k časovému limitu (120000 milisekund).

Výpisové soubory

Pokud se vyznáte v ladění, můžete použít dump soubory k analýze selhání v Launchpadu.

  1. Najděte složku, která obsahuje setup bootstrap logy pro SQL Server. Například v SQL Server 2016 byla výchozí cesta C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log.
  2. Otevřete podsložku bootstrap log, která je specifická pro rozšiřitelnost.
  3. Pokud potřebujete podat žádost o podporu, přidejte celý obsah této složky do zabaleného souboru. Například C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\LOG\ExtensibilityLog.

Přesná poloha se může lišit na tvém systému a může být na disku jiném než na disku C. Určitě si pořiďte logy pro instanci, kde je strojové učení nainstalováno.

Nastavení konfigurace

Tato sekce uvádí další komponenty nebo poskytovatele, kteří mohou být zdrojem chyb při spuštění skriptů v R nebo Python.

Jaké síťové protokoly jsou k dispozici?

Machine Learning Services vyžaduje následující síťové protokoly pro interní komunikaci mezi rozšiřitelnými komponentami a pro komunikaci s externími klienty R nebo Python.

  • Pojmenované kanály
  • protokol TCP/IP

Otevřete SQL Server Configuration Manager pro zjištění, zda je protokol nainstalován, a pokud ano, zda je povolen.

Konfigurace bezpečnosti a oprávnění

Pro účty pracovníků:

  1. V Ovládací panely otevřete Uživatelé a skupiny a najděte skupinu používanou pro spouštění externích skriptových úloh. Ve výchozím nastavení je tato skupina SQLRUserGroup.
  2. Ověřte, že skupina existuje a že obsahuje alespoň jeden pracovní účet.
  3. V SQL Server Management Studio vyberte instanci, kde budou spuštěny R nebo Python úlohy, vyberte Bezpečnost a poté zjistěte, zda je k dispozici přihlášení pro SQLRUserGroup.
  4. Zkontrolujte oprávnění uživatelské skupiny.

Pro individuální uživatelské účty:

  1. Zjistěte, zda instance podporuje autentizaci v Mixed Mode, pouze přihlášení přes SQL nebo pouze Windows authentication. Toto nastavení ovlivňuje požadavky na váš kód v R nebo Python.

  2. Pro každého uživatele, který potřebuje spustit R kód, určte požadovanou úroveň oprávnění v každé databázi, kde budou objekty zapisovány z R, k datům přistupovány nebo vytvořeny objekty.

  3. Pro umožnění spuštění skriptů vytvořte role nebo přidejte uživatele do následujících rolí, podle potřeby:

    • Všichni kromě db_owner: Vyžadují oprávnění EXECUTE ANY EXTERNAL SCRIPT.
    • db_datawriter: Zapsat výsledky z R nebo Python.
    • db_ddladmin: Vytvářet nové objekty.
    • db_datareader: Ke čtení dat, která používá kód v jazyce R nebo Python.
  4. Všimněte si, zda jste při instalaci SQL Server 2016 změnili nějaké výchozí startovací účty.

  5. Pokud uživatel potřebuje nainstalovat nové R balíčky nebo použít R-balíčky, které nainstalovali jiní uživatelé, možná bude potřeba povolit správu balíčků přímo na instanci a poté přiřadit další oprávnění.

Které složky jsou uzamčené antivirovým softwarem?

Antivirový software dokáže složky uzamknout, což brání jak nastavení funkcí strojového učení, tak úspěšnému spuštění skriptů. Zjistěte, zda jsou některé složky ve stromu SQL Server vystaveny skanování proti virům.

Pokud je však na instanci nainstalováno více služeb nebo funkcí, může být obtížné vyjmenovat všechny možné složky, které instance používá. Například když jsou přidány nové funkce, musí být nové složky identifikovány a vyloučeny.

Navíc některé funkce vytvářejí nové složky dynamicky za běhu. Například tabulky OLTP v paměti, uložené procedury a funkce vytvářejí nové adresáře za běhu. Tyto názvy složek často obsahují GUID a nelze je předvídat. SQL Server Trusted Launchpad vytváří nové pracovní adresáře pro úlohy skriptů v R a Python.

Protože nemusí být možné vyloučit všechny složky, které proces SQL Server a jeho funkce potřebují, doporučujeme vyloučit celý adresářový strom instance SQL Server.

Je firewall otevřený pro SQL Server? Podporuje instance vzdálená připojení?

  1. Chcete-li zjistit, zda SQL Server podporuje vzdálená připojení, viz Konfigurace vzdálených serverových připojení.

  2. Zjistěte, zda bylo pro SQL Server vytvořeno pravidlo firewallu. Z bezpečnostních důvodů nemusí být při výchozí instalaci možné, aby se vzdálený klient R nebo Python připojil k instanci. Pro více informací viz Řešení problémů při připojení ke SQL Server.