Partilhar via


Extensão da linguagem Python nos Serviços de Aprendizagem Automática do SQL Server

Aplica-se a: SQL Server 2017 (14.x) e versões posteriores

Este artigo descreve a extensão Python para executar scripts Python externos com SQL Server Machine Learning Services. A extensão acrescenta:

  • Um ambiente de execução em Python
  • Distribuição Anaconda com o runtime e interpretador Python 3.5
  • Bibliotecas e ferramentas padrão
  • Pacotes Microsoft Python:

A instalação do runtime e interpretador Python 3.5 assegura compatibilidade quase completa com soluções Python padrão. O Python corre num processo separado do SQL Server, para garantir que as operações da base de dados não são comprometidas.

Componentes Python

O SQL Server inclui tanto pacotes open-source como proprietários. O runtime em Python instalado pela Setup é o Anaconda 4.2 com Python 3.5. O runtime em Python é instalado independentemente das ferramentas SQL e é executado fora dos processos do motor central, no framework de extensibilidade. Como parte da instalação dos Serviços de Aprendizagem Automática com Python, deve consentir com os termos da Licença Pública GNU.

O SQL Server não modifica os executáveis em Python, mas deve usar a versão de Python instalada pelo Setup porque é nessa versão que os pacotes proprietários são construídos e testados. Para uma lista de pacotes suportados pela distribuição Anaconda, consulte o site de análise Continuum: Lista de pacotes Anaconda.

A distribuição Anaconda associada a uma instância específica do motor de base de dados pode ser encontrada na pasta associada à instância. Por exemplo, se instalou o motor de base de dados do SQL Server 2017 com os serviços de Machine Learning e Python na instância padrão, procure em C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES.

Os pacotes Python adicionados pela Microsoft para cargas de trabalho paralelas e distribuídas incluem as seguintes bibliotecas.

Biblioteca Description
revoscalepy Suporta objetos fonte de dados e exploração, manipulação, transformação e visualização de dados. Suporta a criação de contextos de computação remota, bem como vários modelos escaláveis de aprendizagem automática, como o rxLinMod. Para mais informações, consulte o módulo revoscalepy com SQL Server.
microsoftml Contém algoritmos de aprendizagem automática otimizados para velocidade e precisão, bem como transformações em linha para trabalhar com texto e imagens. Para mais informações, consulte o módulo microsoftml com SQL Server.

Microsoftml e revoscalepy estão fortemente acoplados; as fontes de dados usadas no microsoftml são definidas como objetos revoscalepy. Limitações de contexto de cálculo na transferência de revoscalepy para microsoftml. Nomeadamente, toda a funcionalidade está disponível para operações locais, mas mudar para um contexto de computação remota requer RxInSqlServer.

Utilização de Python no SQL Server

Importas o módulo revoscalepy para o teu código Python e depois chamas funções do módulo, como qualquer outra função Python.

As fontes de dados suportadas incluem bases de dados ODBC, SQL Server e formato de ficheiro XDF para trocar dados com outras fontes ou com soluções R. Os dados de entrada para Python devem ser tabulares. Todos os resultados em Python devem ser devolvidos sob a forma de um data frame pandas .

Os contextos de computação suportados incluem contexto de computação local ou remoto do SQL Server. Um contexto de computação remota refere-se à execução de código que começa num computador, como uma estação de trabalho, mas depois muda a execução do script para um computador remoto. Mudar o contexto de computação requer que ambos os sistemas tenham a mesma biblioteca de revoscalepy.

O contexto de computação local, como seria de esperar, inclui a execução de código Python no mesmo servidor da instância do motor de base de dados, com código dentro de T-SQL ou incorporado num procedimento armazenado. Também pode correr o código a partir de um IDE Python local e fazer com que o script seja executado no computador SQL Server, definindo um contexto de computação remota.

Arquitetura de execução

Os diagramas seguintes representam a interação dos componentes do SQL Server com o runtime Python em cada um dos cenários suportados: execução de scripts na base de dados e execução remota a partir de um terminal Python, usando um contexto de computação SQL Server.

Scripts Python executados diretamente na base de dados

Quando executa Python "dentro" do SQL Server, deve encapsular o script Python dentro de um procedimento armazenado especial, sp_execute_external_script.

Depois de o script ter sido incorporado no procedimento armazenado, qualquer aplicação que consiga fazer uma chamada de stored procedure pode iniciar a execução do código Python. A partir daí, o SQL Server gere a execução do código, conforme resumido no diagrama seguinte.

script-in-db-python

  1. O parâmetro @language='Python' passado ao procedimento armazenado indica um pedido para o runtime em Python. O SQL Server envia este pedido para o serviço de launchpad. No Linux, o SQL utiliza um serviço launchpadd para comunicar com um processo de launchpad separado para cada utilizador. Consulte o diagrama da arquitetura de extensibilidade para detalhes.
  2. O serviço de inicialização inicia o iniciador apropriado; neste caso, PythonLauncher.
  3. O PythonLauncher inicia o processo externo do Python35.
  4. O BxlServer coordena-se com o runtime Python para gerir trocas de dados e armazenamento de resultados de trabalho.
  5. O SQL Satellite gere as comunicações sobre tarefas e processos relacionados com o SQL Server.
  6. O BxlServer utiliza SQL Satellite para comunicar o estado e os resultados ao SQL Server.
  7. O SQL Server obtém resultados e encerra tarefas e processos relacionados.

Scripts Python executados a partir de um cliente remoto

Pode executar scripts Python a partir de um computador remoto, como um portátil, e fazê-los executar no contexto do computador SQL Server, se estas condições forem cumpridas:

  • Desenhas os scripts de forma adequada
  • O computador remoto instalou as bibliotecas de extensibilidade utilizadas pelos Serviços de Aprendizagem Automática. O pacote revoscalepy é obrigado a utilizar contextos de computação remota.

O diagrama seguinte resume o fluxo de trabalho global quando os scripts são enviados a partir de um computador remoto.

remote-sqlcc-from-python

  1. Para funções suportadas em revoscalepy, o runtime em Python chama uma função de ligação, que por sua vez chama BxlServer.
  2. O BxlServer está incluído nos Serviços de Aprendizagem Automática (In-Database) e corre num processo separado do runtime em Python.
  3. O BxlServer determina o destino da ligação e inicia uma ligação usando ODBC, passando as credenciais fornecidas como parte da cadeia de ligação no script Python.
  4. O BxlServer abre uma ligação à instância do SQL Server.
  5. Quando é chamado um tempo de execução de script externo, é invocado o serviço launchpad, que por sua vez inicia o launcher apropriado: neste caso, PythonLauncher.dll. Posteriormente, o processamento do código Python é tratado num fluxo de trabalho semelhante ao que acontece quando o código Python é invocado a partir de um procedimento armazenado em T-SQL.
  6. O PythonLauncher faz uma chamada para a instância do Python que está instalada no computador SQL Server.
  7. Os resultados são devolvidos ao BxlServer.
  8. O SQL Satellite gere a comunicação com o SQL Server e a limpeza dos objetos de trabalho relacionados.
  9. O SQL Server passa os resultados de volta ao cliente.

Próximos passos