Aracılığıyla paylaş


SQL Server Machine Learning Services'da genişletilebilirlik mimarisi

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri

Bu makalede, SQL Server Machine Learning Services üzerinde bir dış Python veya R betiği çalıştırmaya yönelik genişletilebilirlik çerçevesinin mimarisi açıklanmaktadır. Betik, çekirdek veritabanı motorunun bir uzantısı olarak dil çalışma zamanı ortamında yürütülür.

Arka plan

R Hizmetleri ile R çalışma zamanını desteklemek için SQL Server 2016'da genişletilebilirlik çerçevesi kullanıma sunulmuştur. SQL Server 2017 ve üzeri, Machine Learning Services ile Python desteğine sahiptir.

Genişletilebilirlik çerçevesinin amacı, SQL Server ile R ve Python gibi veri bilimi dilleri arasında bir arabirim sağlamaktır. Amaç, veri bilimi çözümlerini üretime taşırken yaşanan sürtüşmeleri azaltmak ve geliştirme sürecinde ortaya çıkarılmış verileri korumaktır. Veritabanı yöneticileri, SQL Server tarafından yönetilen güvenli bir çerçeve içinde güvenilir bir betik dili yürüterek, veri bilimcilerinin kurumsal verilere erişmesine izin verirken güvenliği koruyabilir.

Aşağıdaki diyagramda genişletilebilir mimarinin fırsatları ve avantajları görsel olarak açıklanmaktadır.

SQL Server ile entegrasyon hedefleri

Harici bir betik, saklı yordam çağrılarak çalıştırılabilir ve sonuçlar doğrudan SQL Server'a tablo şeklinde geri döndürülür. Bu, SQL sorgusu gönderebilen ve sonuçları işleyebilen herhangi bir uygulamadan makine öğrenmesi oluşturmayı veya kullanmayı kolaylaştırır.

  • Dış betik yürütme, SQL Server veri güvenliğine tabidir. Dış betik çalıştıran bir kullanıcı yalnızca SQL sorgusunda eşit olarak kullanılabilen verilere erişebilir. Sorgu yetersiz izin nedeniyle başarısız olursa, aynı kullanıcı tarafından çalıştırılan bir betik de aynı nedenle başarısız olur. SQL Server güvenliği tablo, veritabanı ve örnek düzeyinde uygulanır. Veritabanı yöneticileri kullanıcı erişimini, dış betikler tarafından kullanılan kaynakları ve sunucuya eklenen dış kod kitaplıklarını yönetebilir.

  • Ölçeklendirme ve iyileştirme fırsatlarının iki temeli vardır: veritabanı platformu üzerinden kazançlar (ColumnStore dizinleri, kaynak idaresi); ve uzantıya özgü kazançlar, örneğin R ve Python için Microsoft kitaplıkları veri bilimi modelleri için kullanıldığında. R tek iş parçacıklı olsa da RevoScaleR işlevleri çok iş parçacıklı olup bir iş yükünü birden çok çekirdeğe dağıtabilen işlevlerdir.

  • Dağıtımda SQL Server yöntemleri kullanılır. Bunlar, sunucuda kalıcı olan tahmin modellerinden sonuç döndürmek için PREDICT gibi işlevleri çağıran bir dış betiği, eklenmiş SQL'i veya T-SQL sorgularını sarmalayan saklı yordamlar olabilir.

  • Belirli araçlarda ve IDE'lerde yerleşik becerilere sahip geliştiriciler bu araçlara kod yazabilir ve ardından kodu SQL Server'a taşıyabilir.

Mimari diyagramı

Mimari, dış betikler SQL Server'dan ayrı bir işlemde çalışacak şekilde tasarlanmıştır. Bununla birlikte, veri ve işlemler için SQL Server'daki istek zincirini dahili olarak yöneten bileşenlere sahiptir. SQL Server sürümüne bağlı olarak, desteklenen dil uzantıları R, Python ve Java ve .NET gibi üçüncü taraf dilleri içerir.

Windows'ta bileşen mimarisi:

Windows bileşen mimarisi

Linux'ta bileşen mimarisi:

Linux bileşen mimarisi

Bileşenler, dış çalışma zamanlarını çağırmak için kullanılan bir launchpad hizmeti ve yorumlayıcıları ve kütüphaneleri yüklemek için kütüphane özelinde mantığı içerir. Başlatıcı, bir dil çalışma zamanının yanı sıra tüm özel modülleri yükler. Örneğin, kodunuz RevoScaleR işlevleri içeriyorsa bir RevoScaleR yorumlayıcısı yüklenir. BxlServer ve SQL Uydusu , SQL Server ile iletişimi ve veri aktarımını yönetir.

Linux'ta SQL, her kullanıcı için ayrı bir başlatma çubuğu işlemiyle iletişim kurmak için bir başlatma çubuğu hizmeti kullanır.

Launchpad

SQL Server Launchpad, tam metin dizin oluşturma ve sorgu hizmetinin tam metin sorgularını işlemek için ayrı bir konak başlattığı şekilde, harici betikleri yöneten ve çalıştıran bir hizmettir. Başlatma çubuğu hizmeti yalnızca Microsoft tarafından yayımlanan veya Performans ve kaynak yönetimi gereksinimlerinin karşılanması için Microsoft tarafından onaylanan güvenilen başlatıcıları başlatabilir.

Güvenilen başlatıcılar Extension SQL Server sürümleri
Windows için R dili için RLauncher.dll R uzantısı SQL Server 2016 ve üzeri
Windows için Python dili için Pythonlauncher.dll Python uzantısı SQL Server 2017 ve üzeri
Linux için R dili için RLauncher.so R uzantısı SQL Server 2019 ve üzeri
Linux için Python dili için Pythonlauncher.so Python uzantısı SQL Server 2019 ve üzeri

SQL Server Launchpad hizmeti kendi kullanıcı hesabı altında çalışır. Başlatma çubuğu çalıştıran hesabı değiştirirseniz, değişikliklerin ilgili dosyalara yazıldığından emin olmak için SQL Server Configuration Manager'ı kullanarak bunu yapmayı unutmayın.

Windows'ta, SQL Server Machine Learning Services eklediğiniz her veritabanı altyapısı örneği için ayrı bir SQL Server Launchpad hizmeti oluşturulur. Her veritabanı altyapısı örneği için bir başlatma çubuğu hizmeti vardır, bu nedenle dış betik desteğine sahip birden çok örneğiniz varsa, her biri için bir başlatma çubuğu hizmetiniz olur. Veritabanı altyapısı örneği, bunun için oluşturulan başlatma çubuğu hizmetine bağlıdır. Saklı yordamda veya T-SQL'de dış betiğin tüm çağrıları, SQL Server hizmetinin aynı örnek için oluşturulan başlatma çubuğu hizmetini çağırması ile sonuçlanır.

Görevleri desteklenen belirli bir dilde yürütmek için başlatıcı kaynak havuzundan güvenli bir çalışan hesabı alır ve harici çalışma zamanını yönetmek için bir uydu süreci başlatır. Her bir uydu işlemi başlatıcının kullanıcı hesabını devralır ve betik yürütme süresi boyunca bu kullanıcı hesabını kullanır. Betik paralel işlemler kullanıyorsa, bunlar aynı, tek çalışan hesabı altında oluşturulur.

Linux'ta yalnızca bir veritabanı altyapısı örneği desteklenir ve örneğe bağlı bir başlatma çubuğu hizmeti vardır. Betik yürütüldüğünde, launchpadd hizmeti, düşük ayrıcalıklı kullanıcı hesabı mssql_satellite ile ayrı bir launchpad süreci başlatır. Her uydu işlemi launchpad'in mssql_satellite kullanıcı hesabını devralır ve betik yürütme süresi boyunca bunu kullanır.

BxlServer ve SQL Uydusu

BxlServer , Microsoft tarafından sağlanan ve SQL Server ile dil çalışma zamanı arasındaki iletişimi yöneten bir yürütülebilir dosyadır. Windows için Windows iş nesnelerini veya dış betik oturumlarını içermek için kullanılan Linux ad alanlarını oluşturur. Ayrıca her dış betik işi için güvenli çalışma klasörleri sağlar ve dış çalışma zamanı ile SQL Server arasında veri aktarımını yönetmek için SQL Uydusunu kullanır. bir iş çalışırken İşlem Gezgini'yi çalıştırırsanız, BxlServer'ın bir veya birden çok örneğini görebilirsiniz.

BxlServer, veri aktarmak ve görevleri yönetmek için SQL Server ile birlikte çalışan bir dil çalışma zamanı ortamına eşlik eden bir sunucudur. BXL, İkili Exchange dili anlamına gelir ve SQL Server ile dış işlemler arasında verileri verimli bir şekilde taşımak için kullanılan veri biçimini ifade eder.

SQL Uydu , C veya C++ kullanılarak uygulanan dış kodu veya dış çalışma zamanlarını destekleyen, veritabanı altyapısına dahil edilen bir genişletilebilirlik API'sidir.

BxlServer şu görevler için SQL Satellite kullanır:

  • Giriş verilerini okuma
  • Çıkış verileri yazma
  • Giriş bağımsız değişkenlerini alma
  • Çıktı bağımsız değişkenlerini yazma
  • Hata yönetimi
  • STDOUT ve STDERR çıktısını istemciye geri yazma

SQL Uydu, SQL Server ile dış betik dilleri arasında hızlı veri aktarımı için iyileştirilmiş özel bir veri biçimi kullanır. Tür dönüştürmeleri gerçekleştirir ve SQL Server ile dış betik çalışma zamanı arasındaki iletişim sırasında giriş ve çıkış veri kümelerinin şemalarını tanımlar.

SQL Uydu sistemi, Windows genişletilmiş olayları (XEvents) kullanılarak izlenebilir. Daha fazla bilgi için bkz. SQL Server Machine Learning Services için Genişletilmiş Olaylar.

Bileşenler arasındaki iletişim kanalları

Bileşenler ve veri platformları arasındaki iletişim protokolleri bu bölümde açıklanmıştır.

  • TCP/IP

    Varsayılan olarak, SQL Server ile SQL Uydu arasındaki iç iletişimler TCP/IP kullanır.

  • Adlandırılmış Kanallar

    SQL Satellite aracılığıyla BxlServer ile SQL Server arasında iç veri aktarımı, performansı geliştirmek için özel, sıkıştırılmış bir veri biçimi kullanır. Veriler, dil çalışma zamanları ile BxlServer arasında, Adlandırılmış Kanallar kullanılarak BXL biçiminde değiştirilir.

  • ODBC

    Dış veri bilimi istemcileri ile uzak SQL Server örneği arasındaki iletişimlerde ODBC kullanılır. Betik işlerini SQL Server'a gönderen hesabın hem örneğe bağlanma hem de dış betikleri çalıştırma izinlerine sahip olması gerekir.

    Ayrıca, göreve bağlı olarak hesabın şu izinlere ihtiyacı olabilir:

    • İş tarafından kullanılan verileri okuma
    • Tablolara veri yazma: Örneğin, sonuçları tabloya kaydederken
    • Veritabanı nesneleri oluşturun: Örneğin, yeni bir saklı yordamın parçası olarak dış betiği kaydederken.

    SQL Server uzak bir istemciden yürütülen betik için işlem bağlamı olarak kullanıldığında ve yürütülebilir dosyanın bir dış kaynaktan veri alması gerektiğinde, geri yazma için ODBC kullanılır. SQL Server, uzak komutu veren kullanıcının kimliğini geçerli örnekteki kullanıcının kimliğiyle eşler ve o kullanıcının kimlik bilgilerini kullanarak ODBC komutunu çalıştırır. Bu ODBC çağrısını gerçekleştirmek için gereken bağlantı dizesi istemci kodundan alınır.

  • RODBC (yalnızca R)

    RODBC kullanılarak betik içinde ek ODBC çağrıları yapılabilir. RODBC, ilişkisel veritabanlarındaki verilere erişmek için kullanılan popüler bir R paketidir; ancak performansı genellikle SQL Server tarafından kullanılan karşılaştırılabilir sağlayıcılardan daha yavaştır. Birçok R betikleri, analizde kullanılmak üzere "ikincil" veri kümelerini almanın bir yolu olarak RODBC'ye eklenmiş çağrılar kullanır. Örneğin, bir modeli eğiten saklı yordam, model eğitimi için verileri almak üzere bir SQL sorgusu tanımlayabilir, ancak ek faktörler almak, arama yapmak veya metin dosyaları ve Excel gibi harici kaynaklardan yeni veriler almak için gömülü bir RODBC çağrısı kullanabilir.

    Aşağıdaki kod, R betiğine eklenmiş bir RODBC çağrısını gösterir:

    library(RODBC);
    connStr <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name, ";Trusted_Connection=true;", sep="");
    dbhandle <- odbcDriverConnect(connStr)
    OutputDataSet <- sqlQuery(dbhandle, "select * from table_name");
    
  • Diğer protokoller

    "Öbekler" içinde çalışması veya uzak istemciye veri aktarması gerekebilecek işlemler de XDF dosya biçimini kullanabilir. Gerçek veri aktarımı kodlanmış bloblar aracılığıyla yapılır.

Ayrıca Bkz.