Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri
Önemli
Machine Learning Server (eski adıyla R Server) desteği 1 Temmuz 2022'de sona erdi. Daha fazla bilgi için bkz. Machine Learning Server'a neler oluyor?
Bu makalede , SQL Server Machine Learning Services ve SQL Server2016 R Hizmetleri'nde sağlanan Python ve R bileşenleriyle ilgili bilinen sorunlar veya sınırlamalar açıklanmaktadır.
Kurulum ve yapılandırma sorunları
İlk kurulum ve yapılandırmayla ilgili işlemlerin açıklaması için bkz. SQL Server Machine Learning Services'ı yükleme. Yükseltmeler, yan yana yükleme ve yeni R veya Python bileşenlerinin yüklenmesi hakkında bilgi içerir.
Eksik ortam değişkeni nedeniyle MKL hesaplamalarında tutarsız sonuçlar
Şunlar için geçerlidir: R_SERVER ikilileri 9.0, 9.1, 9.2 veya 9.3.
R_SERVER Intel Matematik Çekirdek Kitaplığı'nı (MKL) kullanır. MKL içeren hesaplamalar için, sisteminizde bir ortam değişkeni eksikse tutarsız sonuçlar oluşabilir.
R_SERVER koşullu sayısal yeniden üretilebilirlik sağlamak için ortam değişkenini 'MKL_CBWR'=AUTO ayarlayın. Daha fazla bilgi için bkz. Koşullu Sayısal Yeniden Üretilebilirlik 'e (CNR) Giriş.
Geçici çözüm
Denetim Masası'nda Sistem ve Güvenlik>Sistemi>Gelişmiş Sistem Ayarları>Ortam Değişkenleri'ni seçin.
Yeni bir Kullanıcı veya Sistem değişkeni oluşturun.
- Değişkeni olarak
MKL_CBWRayarlayın. - Değeri olarak
AUTOayarlayın.
- Değişkeni olarak
R_SERVER yeniden başlatın. SQL Server'da SQL Server Launchpad Hizmetini yeniden başlatabilirsiniz.
Uyarı
Linux üzerinde SQL Server 2019 (15.x) çalıştırıyorsanız, kullanıcı giriş dizininizdeki .bash_profile düzenleyin veya oluşturun ve export MKL_CBWR="AUTO" satırını ekleyin. Bash komut istemine yazarak source .bash_profile bu dosyayı yürütebilirsiniz. R komut istemine yazarak Sys.getenv() R_SERVER yeniden başlatın.
R Betiği çalışma zamanı hatası (SQL Server 2017 CU 5 - CU 7 regresyonu)
SQL Server 2017 (14.x) için, 5 ile 7 arasındaki toplu güncelleştirmelerde, rlauncher.config dosyasında geçici dizin dosya yolunun bir boşluk içerdiği bir regresyon vardır. Bu regresyon CU 8'de düzeltildi.
R betiğini çalıştırırken göreceğiniz hata aşağıdaki iletileri içerir:
'R' betiği için çalışma zamanıyla iletişim kurulamıyor. Lütfen 'R' çalışma zamanının gereksinimlerini denetleyin.
Harici betikten gelen STDERR iletileri:
Önemli hata: 'R_TempDir' oluşturulamıyor
Geçici çözüm
Kullanılabilir olduğunda CU 8'i uygulayın. Alternatif olarak, yükseltilmiş bir komut isteminde uninstall/install ile rlauncher.config komutunu çalıştırarak yeniden oluşturabilirsiniz.
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /uninstall /sqlbinnpath:<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /install /sqlbinnpath:<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>
Aşağıdaki örnek, varsayılan "MSSQL14.MSSQLSERVER" örneği ile ilgili komutların C:\Program Files\Microsoft SQL Server\ içine nasıl yüklendiğini göstermektedir.
"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /uninstall /sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0 /instance:MSSQLSERVER
"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /install /sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0 /instance:MSSQLSERVER
SQL Server makine öğrenmesi özellikleri bir etki alanı denetleyicisine yüklenemiyor
SQL Server 2016 (13.x) R Services veya SQL Server Machine Learning Services'i bir etki alanı denetleyicisine yüklemeye çalışırsanız kurulum şu hatalarla başarısız olur:
Özelliğin kurulum işlemi sırasında bir hata oluştu
Kimliğe sahip grup bulunamıyor
Bileşen hata kodu: 0x80131509
Hatanın nedeni, bir etki alanı denetleyicisinde hizmetin makine öğrenmesini çalıştırmak için gereken 20 yerel hesabı oluşturamamasıdır. Genel olarak, SQL Server'ı bir etki alanı denetleyicisine yüklemenizi önermeyiz. Daha fazla bilgi için bkz . Destek bülteni 2032911.
Microsoft R İstemcisi ile uyumluluğu sağlamak için en son hizmet sürümünü yükleyin
Microsoft R İstemcisi'nin en son sürümünü yükler ve uzak işlem bağlamında SQL Server'da R çalıştırmak için kullanırsanız, aşağıdaki gibi bir hata alabilirsiniz:
Bilgisayarınızda, Microsoft R Server sürüm 8.x.x ile uyumsuz olan Microsoft R İstemcisi'nin 9.x.x sürümünü çalıştırıyorsanız. Uyumlu bir sürümü indirin ve yükleyin.
SQL Server 2016 (13.x), istemcideki R kitaplıklarının sunucudaki R kitaplıklarıyla tam olarak eşleşmesini gerektirir. Kısıtlama R Server 9.0.1'den sonraki sürümler için kaldırılmıştır. Ancak, bu hatayla karşılaşırsanız, istemciniz ve sunucu tarafından kullanılan R kitaplıklarının sürümünü doğrulayın ve gerekirse istemciyi sunucu sürümüyle eşleşecek şekilde güncelleştirin.
SQL Server R Services ile yüklenen R sürümü, SQL Server hizmet sürümü her yüklendiğinde güncelleştirilir. R bileşenlerinin her zaman en güncel sürümlerine sahip olduğunuzdan emin olmak için tüm hizmet paketlerini yüklediğinizi sağlamak üzere kontrol edin.
SQL Server 2016'da R Server 8.0.3 çalıştırırken bir hata iletisi alabilirsiniz: You are running version 9.0.0 of Microsoft R client on your computer, which is incompatible with the Microsoft R server version 8.0.3. Download and install a compatible version. SQL Server 2016'da Microsoft R Client 9.0.0 ile uyumluluk aşağıdaki düzeltme eklerinde sağlandı:
R paketleriyle ilgili sorunları önlemek için, sonraki bölümde açıklandığı gibi hizmet sözleşmenizi Modern Yaşam Döngüsü Desteği ilkesini kullanacak şekilde değiştirerek sunucuda yüklü olan R kitaplıklarının sürümünü de yükseltebilirsiniz. Bunu yaptığınızda, SQL Server ile yüklenen R sürümü Machine Learning Server (eski adıYla Microsoft R Server) güncelleştirmeleri için kullanılan zamanlamayla güncelleştirilir.
Şunlar için geçerlidir: SQL Server 2016 (13.x) R Servisleri, R Server sürüm 9.0.0 veya önceki sürümleriyle
SQL Server 2017 CU 3 kurulumunda R bileşenleri eksik
SQL Server'a eklenmesi gereken R yükleme dosyaları olmadan sınırlı sayıda Azure sanal makinesi sağlandı. Bu sorun, 2018-01-05 ile 2018-01-23 aralığında sağlanan sanal makineler için geçerlidir. Bu sorun, 2018-01-05 ile 2018-01-23 aralığında SQL Server 2017 (14.x) için CU 3 güncelleştirmesini uyguladıysanız şirket içi yüklemeleri de etkileyebilir.
R yükleme dosyalarının doğru sürümünü içeren bir hizmet sürümü sağlanmıştır.
Bileşenleri yüklemek ve SQL Server 2017 (14.x) CU 3'ü onarmak için CU 3'ü kaldırmanız ve güncelleştirilmiş sürümü yeniden yüklemeniz gerekir:
- R yükleyicilerini içeren güncelleştirilmiş CU 3 yükleme dosyasını indirin.
- CU 3'i kaldırın. Denetim Masası'nda Güncelleştirmeyi kaldır'ı arayın ve ardından "SQL Server 2017 (KB4052987) (64 bit) için Düzeltme 3015"i seçin. Kaldırma işlemlerine devam edin.
- CU 3 güncelleştirmesini, indirdiğiniz KB4052987 için güncelleştirmeye çift tıklayarak yeniden yükleyin:
SQLServer2017-KB4052987-x64.exe. Yükleme talimatlarını izleyin.
SQL Server 2017 veya sonraki sürümlerin çevrimdışı yüklemelerinde Python bileşenleri yüklenemiyor
İnternet erişimi olmayan bir bilgisayara SQL Server 2017 'nin (14.x) yayın öncesi sürümünü yüklerseniz, yükleyici indirilen Python bileşenlerinin konumunu soran sayfayı görüntüleyemeyebilir. Böyle bir örnekte Machine Learning Services özelliğini yükleyebilirsiniz ancak Python bileşenlerini yükleyemezsiniz.
Bu sorun yayın sürümünde düzeltildi. Ayrıca bu sınırlama R bileşenleri için geçerli değildir.
Şunlar için geçerlidir: Python ile SQL Server 2017 (14.x)
SQL Server 2017 kullanarak istemciden SQL Server R Services'ın eski bir sürümüne bağlandığınızda uyumsuz sürüm uyarısı verme
R kodunu SQL Server 2016 (13.x) işlem bağlamında çalıştırdığınızda aşağıdaki hatayı görebilirsiniz:
Bilgisayarınızda, Microsoft R Server sürüm 8.0.3 ile uyumlu olmayan Microsoft R İstemcisi'nin 9.0.0 sürümünü çalıştırıyorsunuz. Uyumlu bir sürümü indirin ve yükleyin.
Bu ileti, aşağıdaki iki deyimden biri doğruysa görüntülenir:
- SQL Server 2017 (14.x) kurulum sihirbazını kullanarak bir istemci bilgisayara R Server (Bağımsız) yüklediniz.
- Microsoft R Server'ı ayrı Windows yükleyicisini kullanarak yüklemişsinizdir.
Sunucu ve istemcinin aynı sürümü kullandığından emin olmak için SQL Server 2016 (13.x) örneklerindeki R bileşenlerini yükseltmek için Microsoft R Server 9.0 ve sonraki sürümlerde desteklenen bağlamayı kullanmanız gerekebilir. R Hizmetleri sürümünüzde yükseltme desteğinin kullanılabilir olup olmadığını belirlemek için bkz . SqlBindR.exekullanarak R Hizmetleri örneğini yükseltme .
Şunlar için geçerlidir: SQL Server 2016 (13.x) R Servisleri, R Server sürüm 9.0.0 veya önceki sürümleriyle birlikte
SQL Server 2016 hizmet sürümleri kurulumu R bileşenlerinin daha yeni sürümlerini yükleyemeyebilir
İnternet'e bağlı olmayan bir bilgisayara toplu güncelleştirme yüklediğinizde veya SQL Server 2016 (13.x) için bir hizmet paketi yüklediğinizde, kurulum sihirbazı indirilen CAB dosyalarını kullanarak R bileşenlerini güncelleştirmenizi sağlayan istemi görüntüleyemeyebilir. Bu hata genellikle veritabanı altyapısıyla birlikte birden çok bileşen yüklendiğinde oluşur.
Geçici bir çözüm olarak, komut satırını kullanarak ve bu örnekte gösterildiği gibi bağımsız değişkenini MRCACHEDIRECTORY belirterek hizmet sürümünü yükleyebilirsiniz ve bu da CU 1 güncelleştirmelerini yükler:
C:\<path to installation media>\SQLServer2016-KB3164674-x64.exe /Action=Patch /IACCEPTROPENLICENSETERMS /MRCACHEDIRECTORY=<path to CU 1 CAB files>
En son yükleyicileri almak için bkz. İnternet erişimi olmadan makine öğrenmesi bileşenlerini yükleme.
Şunlar için geçerlidir: SQL Server 2016 (13.x) R Servisleri, R Server sürüm 9.0.0 veya önceki sürümleriyle
Sürüm R sürümünden farklıysa Başlatma Çubuğu hizmetleri başlatılamıyor
SQL Server R Services'i veritabanı altyapısından ayrı olarak yüklerseniz ve derleme sürümleri farklıysa, Sistem Olay günlüğünde aşağıdaki hatayı görebilirsiniz:
SQL Server Launchpad hizmeti şu hata nedeniyle başlatılamadı: Hizmet başlangıç veya denetim isteğine zamanında yanıt vermedi.
Örneğin, sürüm sürümünü kullanarak veritabanı altyapısını yüklerseniz, veritabanı altyapısını yükseltmek için bir düzeltme eki uygularsanız ve ardından yayın sürümünü kullanarak R Hizmetleri özelliğini eklerseniz bu hata oluşabilir.
Bu sorunu önlemek için Dosya Yöneticisi gibi bir yardımcı program kullanarak Launchpad.exe sürümlerini sql ikili dosyalarının sürümüyle (gibi) sqldk.dllkarşılaştırın. Tüm bileşenler aynı sürüm numarasına sahip olmalıdır. Bir bileşeni yükseltirseniz, aynı yükseltmeyi diğer tüm yüklü bileşenlere uyguladığınıza emin olun.
Örneğe ait klasörde Launchpad'i Binn arayın. Örneğin, SQL Server 2016'nın (13.x) varsayılan yüklemesinde yol C:\Program Files\Microsoft SQL Server\MSSQL.13.InstanceNameMSSQL\Binn olabilir.
Uzak işlem bağlamları, Azure sanal makinelerinde çalışan SQL Server örneklerinde bir güvenlik duvarı tarafından engellenir
Sql Server'ı bir Azure sanal makinesine yüklediyseniz, sanal makinenin çalışma alanının kullanılmasını gerektiren işlem bağlamlarını kullanamayabilirsiniz. Bunun nedeni, varsayılan olarak Azure sanal makinelerindeki güvenlik duvarının yerel R kullanıcı hesapları için ağ erişimini engelleyen bir kural içermesidir.
Geçici bir çözüm olarak, Azure VM'de Gelişmiş Güvenlik özellikli Windows Güvenlik Duvarı'nı açın, Giden Kuralları'nı seçin ve şu kuralı devre dışı bırakın: SQL Server örneğinde R yerel kullanıcı hesapları için ağ erişimini engelleme MSSQLSERVER. Kuralı etkin de bırakabilirsiniz, ancak güvenlik özelliğini Güvenliyse İzin Ver olarak değiştirebilirsiniz.
SQL Server 2016 Express sürümünde zımni kimlik doğrulaması
Tümleşik Windows kimlik doğrulamasını kullanarak uzak veri bilimi iş istasyonundan R işleri çalıştırdığınızda, SQL Server betiğin gerektirebileceği tüm yerel ODBC çağrılarını oluşturmak için zımni kimlik doğrulamasını kullanır. Ancak bu özellik SQL Server 2016 (13.x) Express sürümünün RTM derlemesinde çalışmadı.
Sorunu düzeltmek için sonraki bir hizmet sürümüne yükseltmenizi öneririz. Yükseltme yapmak uygun değilse, geçici bir çözüm olarak, katıştırılmış ODBC çağrıları gerektirebilecek uzak R işlerini çalıştırmak için SQL kullanıcı girişi kullanın.
Şunlar için geçerlidir: SQL Server 2016 (13.x) R Services Express sürümü
SQL Server tarafından kullanılan kitaplıklar diğer araçlardan çağrıldığında performans sınırları
SQL Server için yüklenen makine öğrenmesi kitaplıklarını RGui gibi bir dış uygulamadan çağırmak mümkündür. Bunu yapmak, yeni paketler yükleme veya çok kısa kod örneklerinde geçici testler çalıştırma gibi belirli görevleri yerine getirmenin en kullanışlı yolu olabilir. Ancak SQL Server dışında performans sınırlı olabilir.
Örneğin, SQL Server'ın Enterprise sürümünü kullanıyor olsanız bile, R kodunuzu dış araçları kullanarak çalıştırdığınızda R tek iş parçacıklı modda çalışır. SQL Server'da performansın avantajlarından yararlanmak için bir SQL Server bağlantısı başlatın ve dış betik çalışma zamanını çağırmak için sp_execute_external_script kullanın.
Genel olarak, SQL Server tarafından kullanılan makine öğrenmesi kitaplıklarını dış araçlardan çağırmaktan kaçının. R veya Python kodunda hata ayıklamanız gerekiyorsa, bunu SQL Server dışında yapmak genellikle daha kolaydır. SQL Server'daki kitaplıkların aynısını almak için Microsoft R client veya SQL Server 2017 Machine Learning Server (Tek Başına) yükleyebilirsiniz.
SQL Server Veri Araçları dış betikler için gerekli izinleri desteklemez
Veritabanı projesini yayımlamak için Visual Studio veya SQL Server Veri Araçları'nı kullandığınızda, herhangi bir sorumlunun dış betik yürütmeye özgü izinleri varsa aşağıdakine benzer bir hata alabilirsiniz:
TSQL Modeli: Veritabanında tersine mühendislik yapıldığında hata algılandı. İzin tanınmadı ve içeri aktarılmadı.
DACPAC modeli şu anda R Services veya Machine Learning Services tarafından kullanılan izinleri desteklememektedir; örneğin GRANT ANY EXTERNAL SCRIPT, veya EXECUTE ANY EXTERNAL SCRIPT. Bu sorun sonraki bir sürümde düzeltilecektir.
Geçici bir çözüm olarak, dağıtımdan sonra bir betikte ek GRANT ifadeleri çalıştırın.
Kaynak yönetimi varsayılan değerleri nedeniyle dış betiğin yürütülmesi kısıtlandı.
Enterprise sürümünde, dış betik işlemlerini yönetmek için kaynak havuzlarını kullanabilirsiniz. Bazı erken sürüm derlemelerinde, R işlemlerine ayrılabilecek bellek üst sınırı yüzde 20'ydi. Bu nedenle, sunucuda 32 GB RAM varsa, R yürütülebilir dosyaları (RTerm.exe ve BxlServer.exe) tek bir istekte en fazla 6,4 GB kullanabilir.
Kaynak sınırlamalarıyla karşılaşırsanız geçerli varsayılanı denetleyin. Yüzde 20 yeterli değilse, bu değeri değiştirme hakkında SQL Server belgelerine bakın.
Şunlar için geçerlidir: SQL Server 2016 (13.x) R Services, Enterprise sürümü
Linux'ta libc++.so olmadan sp_execute_external_script kullanırken hata veriyor
Yüklü değilken libc++.so olan temiz bir Linux makinesinde Java veya başka bir dil ile sp_execute_external_script (SPEES) sorgusu çalıştırmak başarısız olur çünkü commonlauncher.solibc++.so yüklenemiyor.
Örneğin:
EXECUTE sp_execute_external_script @language = N'Java'
, @script = N'JavaTestPackage.PassThrough'
, @parallel = 0
, @input_data_1 = N'select 1'
WITH RESULT SETS((col1 INT NOT NULL));
GO
Aşağıdakine benzer bir mesajla hata verir:
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'Java' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'Java' runtime.
Günlüklerde aşağıdakine benzer bir hata iletisi gösterilir: mssql-launchpadd
Oct 18 14:03:21 sqlextmls launchpadd[57471]: [launchpad] 2019/10/18 14:03:21 WARNING: PopulateLauncher failed: Library /opt/mssql-extensibility/lib/commonlauncher.so not loaded. Error: libc++.so.1: cannot open shared object file: No such file or directory
Geçici çözüm
Aşağıdaki geçici çözümlerden birini gerçekleştirebilirsiniz:
Varsayılan sistem yoluna
/opt/mssql/lib'denlibc++*/lib64kopyala.Yolu kullanıma açmak için
/var/opt/mssql/mssql.confaşağıdaki girdileri ekleyin:[extensibility] readabledirectories = /opt/mssql
Şunlar için geçerlidir: Linux üzerinde SQL Server 2019 (15.x)
FIPS özellikli sunucularda yükleme veya yükseltme hatası
SQL Server 2019'u (15.x) Machine Learning Services ve Dil Uzantıları özelliğiyle yüklerseniz veya Federal Bilgi İşleme Standardı (FIPS) etkinleştirilmiş bir sunucuda SQL Server örneğini yükseltirseniz, aşağıdaki hatayı alırsınız:
Genişletilebilirlik özelliği yüklenirken şu hata iletisiyle bir hata oluştu: AppContainer Oluşturma başarısız oldu, hata iletisi YOK, durum Bu uygulama Windows Platformu FIPS tarafından doğrulanmış şifreleme algoritmalarının bir parçası değil.
Geçici çözüm
SQL Server 2019 (15.x) yüklemeden önce Machine Learning Services ve Dil Uzantıları veya SQL Server örneğinin yükseltmesi özelliğiyle FIPS'yi devre dışı bırakın. Yükleme veya yükseltme tamamlandıktan sonra FIPS'yi yeniden etkinleştirebilirsiniz.
Şunlar için geçerlidir: SQL Server 2019 (15.x)
Belirli algoritmalar, akış veya bölümleme kullanan R kitaplıkları
Sorun
Çalışma zamanı yükseltmesi olan SQL Server 2017 (14.x) için aşağıdaki sınırlamalar geçerlidir. Bu sorun Enterprise sürümü için geçerlidir.
- Paralellik:
RevoScaleRalgoritma veMicrosoftMLsenaryolar için iş parçacığı paralelliği en fazla iki iş parçacığıyla sınırlıdır. - Akış ve bölümleme:
@r_rowsPerReadparametresinin T-SQLsp_execute_external_script'ye iletilmesiyle ilgili senaryolar uygulanmıyor. - Akış & bölümleme:
RevoScaleRveMicrosoftMLveri kaynakları (yani,ODBC,XDF) eğitim veya puanlama senaryoları için satırların dilimlenmiş olarak okunmasını desteklemez. Bu senaryolar her zaman hesaplama için tüm verileri belleğe getirir ve işlemler belleğe bağlıdır
Çözüm
En iyi çözüm SQL Server 2019'a (15.x) yükseltmektir. Alternatif olarak, aşağıdaki görevleri tamamladıktan sonra SQL Server 2017'yi (14.x) RegisterRext.exe /configure kullanılarak yapılandırılmış çalışma zamanı yükseltmesiyle kullanmaya devam edebilirsiniz.
- Kayıt defterini düzenleyerek bir anahtar
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\150oluşturun ve yapılandırıldığı şekilde veriC:\Program Files\Microsoft SQL Server\150\Sharedile bir değerSharedCodeveya örnek paylaşılan dizini ekleyin. -
C:\Program Files\Microsoft SQL Server\150\Shared and copy instapi140.dllklasöründen yeni oluşturulan klasördeC:\Program Files\Microsoft SQL Server\140\Sharedbir klasör oluşturun. - Yeni klasör
instapi140.dlliçindeinstapi150.dll'ıC:\Program Files\Microsoft SQL Server\150\Sharedolarak yeniden adlandırın.
Önemli
Yukarıdaki adımları uygularsanız, SQL Server'ın sonraki bir sürümüne yükseltmeden önce eklenen anahtarı el ile kaldırmanız gerekir.
ML Hizmetlerinde İşlem Havuzu Oluşturma (R ve Python) performans sorunları
Bu bölüm, SQL Server'da ML hizmetlerini (R ve Python) kullanmaya yönelik bilinen sorunları ve geçici çözümleri içerir.
ML Hizmetlerinde Süreç Havuzunun Soğuk Başlangıç Performansı
Yürütüldüğünde sp_execute_external_script, launchpad hizmeti, R ve Python gibi dış çalışma zamanlarını başlatan uydu işlemlerini başlatır. Başlangıç maliyetini amorti etmek için, sonraki yürütmesinde sp_execute_external_scriptkullanılabilecek bir işlem havuzu oluşturulur. Bu işlem havuzu bu kullanıcıya, veritabanına ve kullanılan dile (ML Services'da R veya Python) özgüdür.
İlk sorgunun yürütülmesi
Uydu işlemlerinin ilk kez yürütülürken sp_execute_external_script veya boşta kalma süresinden sonra ısıtılması gerekir (işlemler bir süre kullanılmadığında temizleme göreviyle sonlandırılır). Bu tür havuza alınmış işlemlerin soğuk başlatma süreci yavaş olabilir (örneğin, kaynak kısıtlamaları nedeniyle).
Geçici çözüm
İlk çağrının performansı önemliyse sorguların sıcak tutulması önerilir. Örneğin, işlemlerin süresi dolmadan önce basit sp_execute_external_script bir sorguyu tetikleyen bir arka plan görevi yürütülebilir. Örneğin, R sorgularını sıcak tutmak için aşağıdaki sorguyu düzenli aralıklarla yürütebilirsiniz.
EXECUTE sp_execute_external_script @language = N'R', @script = N'';
GO
Çok sayıda eşzamanlı sorgu
Eşzamanlı sp_execute_external_script yürütme sayısı, havuzdaki etkin R/Python süreçlerinden fazlaysa, havuza ek süreçler eklemek yavaşlayabilir (örneğin, kaynak kısıtlamaları nedeniyle olabilir).
Geçici çözüm
Ölçeklendirme performansı sorununun üstesinden gelmek için birden çok istek toplu işlenebilir (örneğin, geri döngü bağlantıları yoluyla veya birden çok isteği işlemek için betiği yeniden yazarak). Ayrıca, gerçek zamanlı senaryolar için SQL PREDICT kullanılabilir.
R betiği yürütme sorunları
Bu bölüm, SQL Server'da R çalıştırmaya özgü bilinen sorunların yanı sıra RevoScaleR dahil olmak üzere Microsoft tarafından yayımlanan R kitaplıkları ve araçlarıyla ilgili bazı sorunları içerir.
R çözümlerini etkileyebilecek diğer bilinen sorunlar için machine learning sunucusu sitesine bakın.
SQL Server'da varsayılan olmayan bir konumda R betiklerini yürütürken erişim reddedildi uyarısı
SQL Server örneği, klasörün dışında Program Files olduğu gibi varsayılan olmayan bir konuma yüklenmişse, paket yükleyen betikleri çalıştırmaya çalıştığınızda uyarı ACCESS_DENIED tetiklenir. Örneğin:
içinde
normalizePath(path.expand(path), winslash, mustWork): path[2]="~ExternalLibraries/R/8/1": Erişim reddedildi
Bunun nedeni, bir R işlevinin yolu okumaya çalışması ve yerleşik kullanıcılar grubunun SQLRUserGroup okuma erişimi yoksa başarısız olmasıdır. Tetiklenen uyarı geçerli R betiğinin yürütülmesini engellemez, ancak kullanıcı başka bir R betiği çalıştırdığında uyarı tekrar tekrar yinelenebilir.
SQL Server'ı varsayılan konuma yüklediyseniz, tüm Windows kullanıcıları klasörde okuma izinlerine Program Files sahip olduğundan bu hata oluşmaz.
Bu sorun, gelecek bir hizmet sürümünde giderilir. Geçici bir çözüm olarak, SQLRUserGroup grubuna ExternalLibraries tüm üst klasörler için okuma erişimi sağlayın.
RevoScaleR'ın eski ve yeni sürümleri arasında serileştirme hatası
Serileştirilmiş biçimi kullanarak bir modeli uzak SQL Server örneğine geçirdiğinizde şu hatayı alabilirsiniz:
memDecompress(data, type = decompress) iç hatasında -3 hatası memDecompress(2).
Modeli seri hale getirme işlevinin son sürümü olan rxSerializeModel kullanarak kaydettiyseniz ancak seri durumdan çıkardığınız SQL Server örneğinde SQL Server 2017 (14.x) CU 2 veya önceki sürümlerinden RevoScaleR API'lerinin eski bir sürümü varsa bu hata oluşur.
Geçici bir çözüm olarak, SQL Server 2017 (14.x) örneğini CU 3 veya sonraki bir sürümüne yükseltebilirsiniz.
API sürümü aynıysa veya eski bir serileştirme işleviyle kaydedilmiş bir modeli serileştirme API'sinin daha yeni bir sürümünü kullanan bir sunucuya taşıyorsanız hata görünmez.
Başka bir deyişle, serileştirme ve seri durumdan çıkarma işlemleri için aynı RevoScaleR sürümünü kullanın.
Gerçek zamanlı puanlama, ağaç ve orman modellerinde learningRate parametresini doğru işlemez
Bir karar ağacı veya karar ormanı yöntemi kullanarak bir model oluşturur ve öğrenme oranını belirtirseniz, sp_rxpredict kullanırken veya SQL PREDICT işlevini kullanırken, rxPredict kullanımına kıyasla tutarsız sonuçlar görebilirsiniz.
Bunun nedeni, serileştirilmiş modelleri işleyen API'deki bir hatadır ve bu parametre ile sınırlıdır; örneğin, rxBTrees veya
Bu sorun, gelecek bir hizmet sürümünde giderilir.
R işleri için işlemci ilgisi sınırlamaları
SQL Server 2016'nın (13.x) ilk sürüm derlemesinde, işlemci bennizimini yalnızca ilk k grubundaki CPU'lar için ayarlayabilirsiniz. Örneğin, sunucu iki k grubu olan bir 2 yuvalı makineyse, R işlemleri için yalnızca ilk k grubundaki işlemciler kullanılır. R betik işleri için kaynak idaresini yapılandırdığınızda da aynı sınırlama geçerlidir.
Bu sorun SQL Server 2016 (13.x) Service Pack 1'de düzeltildi. En son hizmet sürümüne yükseltmenizi öneririz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) R Services (RTM sürümü)
SQL Server işlem bağlamındaki veriler okunurken sütun türlerinde değişiklik yapılamaz
İşlem bağlamınız SQL Server örneğine ayarlanmışsa, R kodunuzda sütunların veri türünü değiştirmek için colClasses bağımsız değişkenini (veya diğer benzer bağımsız değişkenleri) kullanamazsınız.
Örneğin, CRSDepTimeStr sütunu zaten bir tamsayı değilse aşağıdaki deyim hatayla sonuçlanır:
data <- RxSqlServerData(
sqlQuery = "SELECT CRSDepTimeStr, ArrDelay FROM AirlineDemoSmall",
connectionString = connectionString,
colClasses = c(CRSDepTimeStr = "integer"))
Geçici bir çözüm olarak, kullanılacak CAST SQL sorgusunu yeniden yazabilir veya CONVERT doğru veri türünü kullanarak verileri R'ye sunabilirsiniz. Genel olarak, R kodundaki verileri değiştirmek yerine SQL kullanarak verilerle çalışırken performans daha iyidir.
Şunlar için geçerlidir: SQL Server 2016 (13.x) R Services
Serileştirilmiş modellerin boyutuyla ilgili sınırlar
Bir modeli SQL Server tablosuna kaydettiğinizde, modeli seri hale getirmeniz ve ikili biçimde kaydetmeniz gerekir. Teorik olarak, bu yöntemle depolanabilen bir modelin maksimum boyutu 2 GB'tır ve bu da SQL Server'daki en büyük varbinary sütun boyutudur.
Daha büyük modeller kullanmanız gerekiyorsa aşağıdaki geçici çözümler kullanılabilir:
Modelinizin boyutunu küçültmeye yönelik adımları uygulayın. Bazı açık kaynak R paketleri model nesnesinde çok fazla bilgi içerir ve bu bilgilerin çoğu dağıtım için kaldırılabilir.
Gereksiz sütunları kaldırmak için özellik seçimini kullanın.
Açık kaynak algoritması kullanıyorsanız, MicrosoftML veya RevoScaleR'da karşılık gelen algoritmayı kullanarak benzer bir uygulamayı göz önünde bulundurun. Bu paketler dağıtım senaryoları için iyileştirilmiştir.
Model rasyonalize edildikten ve önceki adımlar kullanılarak boyut küçüldükten sonra, temel R'deki memCompress işlevinin modeli SQL Server'a geçirmeden önce boyutunu küçültmek için kullanılıp kullanılamayabileceğine bakın. Bu seçenek, model 2 GB sınırına yakın olduğunda en iyisidir.
Daha büyük modeller için, modelleri depolamak için varbinary sütunu kullanmak yerine SQL Server FileTable özelliğini kullanabilirsiniz.
FileTable'ları kullanmak için bir güvenlik duvarı özel durumu eklemeniz gerekir çünkü FileTables'ta depolanan veriler SQL Server'daki Dosya akışı dosya sistemi sürücüsü tarafından yönetilir ve varsayılan güvenlik duvarı kuralları ağ dosyası erişimini engeller. Daha fazla bilgi için bkz. FileTable için Önkoşulları Etkinleştirme.
FileTable'ı etkinleştirdikten sonra modeli yazmak için FileTable API'sini kullanarak SQL'den bir yol alırsınız ve ardından modeli kodunuzdan bu konuma yazarsınız. Modeli okumanız gerektiğinde yolu SQL Server'dan alırsınız ve ardından betiğinizdeki yolu kullanarak modeli çağırırsınız. Daha fazla bilgi için bkz. Dosya Input-Output API'leri ile FileTable'lara erişme.
SQL Server işlem bağlamında R kodu yürütürken çalışma alanlarını temizlemekten kaçının
SQL Server işlem bağlamında R kodu çalıştırırken nesne çalışma alanınızı temizlemek için R komutu kullanırsanız veya sp_execute_external_script kullanarak çağrılan bir R betiğinin parçası olarak çalışma alanını temizlerseniz şu hatayı alabilirsiniz: çalışma alanı nesnesi revoScriptConnection bulunamadı
revoScriptConnection , R çalışma alanında SQL Server'dan çağrılan bir R oturumu hakkında bilgi içeren bir nesnedir. Ancak, R kodunuz çalışma alanını temizlemek için bir komut içeriyorsa (örneğin rm(list=ls())), oturum ve R çalışma alanında diğer nesneler hakkındaki tüm bilgiler de temizlenir.
Geçici bir çözüm olarak, SQL Server'da R çalıştırırken değişkenlerin ve diğer nesnelerin ayrım gözetmeksizin temizlenmesini önleyin. R konsolunda çalışırken çalışma alanının temizlenmesi yaygın olsa da, istenmeyen sonuçlara yol açabilir.
- Belirli değişkenleri silmek için R
removeişlevini kullanın: örneğin,remove('name1', 'name2', ...) - Silinecek birden çok değişken varsa, geçici değişkenlerin adlarını bir listeye kaydedin ve düzenli çöp toplama işlemi gerçekleştirin.
R betiğine giriş olarak sağlanabilecek verilerle ilgili kısıtlamalar
R betiğinde aşağıdaki sorgu sonuçları türlerini kullanamazsınız:
AlwaysEncrypted sütunlarına başvuran bir Transact-SQL sorgusundan alınan veriler.
Maskelenmiş sütunlara başvuran bir Transact-SQL sorgusundan alınan veriler.
R betiğinde maskelenmiş veri kullanmanız gerekiyorsa, olası bir geçici çözüm geçici bir tablodaki verilerin bir kopyasını oluşturmak ve bunun yerine bu verileri kullanmaktır.
Metin dizelerinin faktör olarak kullanılması performans düşüşlerine neden olabilir
Dize türü değişkenlerini faktör olarak kullanmak, R işlemleri için kullanılan bellek miktarını büyük ölçüde artırabilir. Bu, genel olarak R ile ilgili bilinen bir sorundur ve konuyla ilgili birçok makale vardır. Örneğin, bkz. Faktörler, R'de birinci sınıf vatandaş değildir, John Mount, R-bloggers'da) veya stringsAsFactors: Yetkisiz biyografi, Roger Peng tarafından.
Sorun SQL Server'a özgü olmasa da, SQL Server'da R kodu çalıştırma performansını büyük ölçüde etkileyebilir. Dizeler genellikle varchar veya nvarchar olarak depolanır ve bir dize verisi sütununda çok sayıda benzersiz değer varsa, bunları dahili olarak tamsayılara ve R tarafından dizelere geri dönüştürme işlemi bellek ayırma hatalarına bile neden olabilir.
Diğer işlemler için kesinlikle bir dize veri türüne ihtiyacınız yoksa, veri hazırlamanın bir parçası olarak dize değerlerini sayısal (tamsayı) veri türüne eşlemek performans ve ölçek perspektifinden yararlı olabilir.
Bu sorunla ilgili bir tartışma ve diğer ipuçları için bkz. R Hizmetleri için Performans - veri iyileştirme.
SQL Server veri kaynakları için varsToKeep ve varsToDrop bağımsız değişkenleri desteklenmez
Sonuçları tabloya yazmak için rxDataStep işlevini kullandığınızda , varsToKeep ve varsToDrop kullanmak, işlemin bir parçası olarak dahil veya hariç tutulacak sütunları belirtmenin kullanışlı bir yoludur. Ancak bu bağımsız değişkenler SQL Server veri kaynakları için desteklenmez.
sp_execute_external_script içinde SQL veri türleri için sınırlı destek
SQL'de desteklenen tüm veri türleri R'de kullanılamaz. Geçici bir çözüm olarak, verileri 'ye geçirmeden önce desteklenmeyen veri türünü desteklenen bir veri türüne atamayı sp_execute_external_scriptgöz önünde bulundurun.
Daha fazla bilgi için bkz. R kitaplıkları ve veri türleri.
Unicode dizeler varchar sütunlarında kullanıldığında dizelerin olası bozulması
Sql Server'dan R/Python'a varchar sütunlarında Unicode verileri geçirmek dize bozulmasına neden olabilir. Bunun nedeni SQL Server harmanlamalarındaki bu Unicode dizelerinin kodlamasının R/Python'da kullanılan varsayılan UTF-8 kodlamasıyla eşleşmemesidir.
SQL Server'dan R/Python'a ASCII olmayan dize verileri göndermek için UTF-8 kodlamasını (SQL Server 2019'da (15.x) kullanılabilir) kullanın veya aynı şekilde nvarchar türünü kullanın.
Yalnızca türünden raw bir değer sp_execute_external_script'den döndürülebilir.
R'den bir ikili veri türü (R ham veri türü) döndürülürse, değerin çıkış veri çerçevesinde gönderilmesi gerekir.
raw dışındaki veri türleriyle, OUTPUT anahtar sözcüğünü ekleyerek saklı prosedürün sonuçlarıyla birlikte parametre değerlerini döndürebilirsiniz. Daha fazla bilgi için bkz . Parametreler.
Ham veri türü değerler içeren birden çok çıkış kümesi kullanmak istiyorsanız, olası bir çözüm yolu saklı yordamı birden çok kez çağırmak veya sonuç kümelerini ODBC kullanarak SQL Server'a geri göndermektir.
Hassasiyet kaybı
Transact-SQL ve R çeşitli veri türlerini desteklediğinden, sayısal veri türleri dönüştürme sırasında duyarlık kaybına neden olabilir.
Örtük veri türü dönüştürme hakkında daha fazla bilgi için bkz. R kitaplıkları ve veri türleri.
transformFunc parametresini kullandığınızda değişken kapsam belirleme hatası
Modelleme yaparken verileri dönüştürmek için, rxLinmod veya rxLogit gibi bir işlevde transformFunc bağımsız değişkenini geçirebilirsiniz. Ancak iç içe işlev çağrıları, çağrılar yerel işlem bağlamında düzgün çalışsa bile SQL Server işlem bağlamında kapsam belirleme hatalarına neden olabilir.
Çözümleme için örnek veri kümesinde değişken yok
Örneğin, yerel genel ortamınızda f ve g olmak üzere iki işlev tanımladığınızı varsayın ve g, f'ü çağırır. Dağıtılmış veya uzak çağrılarda g ile ilgili bir çağrı, f ve g'u uzak çağrıya geçirmiş olsanız bile f bulunamadığı için g'e yapılan çağrı bu hatayla başarısız olabilir.
Bu sorunla karşılaşırsanız, f tanımını, g normalde f çağrısını yapmadan önce g tanımınızın içine gömerek sorunu geçici olarak çözebilirsiniz.
Örneğin:
f <- function(x) { 2*x * 3 }
g <- function(y) {
a <- 10 * y
f(a)
}
Hatadan kaçınmak için tanımı aşağıdaki gibi yeniden yazın:
g <- function(y){
f <- function(x) { 2*x +3}
a <- 10 * y
f(a)
}
RevoScaleR kullanarak veri içeri aktarma ve işleme
Varchar sütunları veritabanından okunduğunda boşluk kırpılır. Bunu önlemek için, metin dizilerini boşluk içermeyen karakterler içine alın.
rxDataStep işlevi, varchar sütunlara sahip veritabanı tabloları oluşturmak için kullanıldığında, sütun genişliği bir veri örneklemine göre tahmin edilir. Genişlik farklılık gösterebiliyorsa, tüm dizelerin ortak bir uzunluğa doldurulması gerekebilir.
Birden çok giriş dosyasını tek bir .xdf dosyasında birleştirerek satırları içeri aktarmak ve eklemek için rxImport veya rxTextToXdf tekrarlı çağrılar kullanıldığında, bir değişkenin veri türünü değiştirmek amacıyla bir dönüştürme kullanılması desteklenmez.
Sınırlı destek için rxExec
SQL Server 2016'da (13.x), rxExec RevoScaleR paketi tarafından sağlanan işlev yalnızca tek iş parçacıklı modda kullanılabilir.
rxGetVarInfo'yu desteklemek için en büyük parametre boyutunu artırma
Çok fazla sayıda değişken içeren veri kümeleri kullanıyorsanız (örneğin, 40.000'den fazla), max-ppsize bayrağını ayarlayıp ardından R'yi başlatarak rxGetVarInfo gibi işlevleri kullanın. bayrağı, max-ppsize işaretçi koruma yığınının en büyük boyutunu belirtir.
R konsolunu kullanıyorsanız (örneğin, RGui.exe veya RTerm.exe), yazarak max-ppsize değerini 500000 olarak ayarlayabilirsiniz:
R --max-ppsize=500000
rxDTree işleviyle ilgili sorunlar
rxDTree İşlev şu anda formül içi dönüştürmeleri desteklememektedir. Anında faktör oluşturma amacıyla F() söz diziminin kullanılması desteklenmez, özellikle. Ancak, sayısal veriler otomatik olarak gruplanır.
Sıralı faktörler, dışındaki rxDTreetüm RevoScaleR çözümleme işlevlerindeki faktörlerle aynı şekilde ele alınır.
data.table R'de OutputDataSet olarak
R'de data.table'yi OutputDataSet olarak kullanmak, SQL Server 2017 (14.x) Toplu Güncelleştirme 13 (CU 13) ve önceki sürümlerinde desteklenmez. Aşağıdaki ileti görünebilir:
Msg 39004, Level 16, State 20, Line 2
A 'R' script error occurred during execution of
'sp_execute_external_script' with HRESULT 0x80004004.
Msg 39019, Level 16, State 2, Line 2
An external script error occurred:
Error in alloc.col(newx) :
Internal error: length of names (0) is not length of dt (11)
Calls: data.frame ... as.data.frame -> as.data.frame.data.table -> copy -> alloc.col
Error in execution. Check the output for more information.
Error in eval(expr, envir, enclos) :
Error in execution. Check the output for more information.
Calls: source -> withVisible -> eval -> eval -> .Call
Execution halted
data.table bir OutputDataSet olarak R'de SQL Server 2017 (14.x) Toplu Güncelleştirme 14 (CU 14) ve sonraki sürümlerde desteklenir.
Kitaplığı yüklerken uzun bir betik çalıştırılamıyor
Uzun süreli bir dış betik oturumu çalıştırmak ve dbo ile eşzamanlı olarak farklı bir veritabanına kitaplık yüklemeye çalışmak betik oturumunu sonlandırabilir.
Örneğin, bu dış betiği master veritabanı üzerinde çalıştırmak:
USE MASTER
DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(max) = N'Sys.sleep(100)'
DECLARE @input_data_1 nvarchar(max) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1 with result sets none
go
dbo paralel olarak LibraryManagementFunctional'da bir kitaplık yüklerken:
USE [LibraryManagementFunctional]
go
CREATE EXTERNAL LIBRARY [RODBC] FROM (CONTENT = N'/home/ani/var/opt/mssql/data/RODBC_1.3-16.tar.gz') WITH (LANGUAGE = 'R')
go
DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(14) = N'library(RODBC)'
DECLARE @input_data_1 nvarchar(8) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1
go
Uzun süredir master veritabanında çalışan önceki harici betik, aşağıdaki hata mesajıyla sonlandırılacak:
HRESULT 0x800704d4 ile 'sp_execute_external_script' yürütülmesi sırasında bir 'R' betiği hatası oluştu.
Geçici çözüm
Kitaplık yüklemesini uzun süre çalışan sorguya paralel olarak çalıştırmayın. Veya yükleme tamamlandıktan sonra uzun süre çalışan sorguyu yeniden çalıştırın.
Şunlar için geçerlidir: Yalnızca Linux ve Büyük Veri Kümelerinde SQL Server 2019 (15.x).
Paralel yürütme içeren R betikleri yürütülürken SQL Server yanıt vermeyi durduruyor
SQL Server 2019 (15.x), paralel yürütme kullanan R betiklerini etkileyen bir regresyon içerir. Örnekler arasında rxExec, RxLocalPar işlem bağlamı ile kullanma ve paralel paketi kullanan betikler yer alır. Bu sorun, SQL Server'da yürütülürken null cihaza yazarken paralel paketin karşılaştığı hatalardan kaynaklanır.
Şunlar için geçerlidir: SQL Server 2019 (15.x).
Para/sayısal/ondalık/bigint veri türleri için hassasiyet kaybı
ile sp_execute_external_script R betiği yürütmek, giriş verileri olarak para, sayısal, ondalık ve bigint veri türlerine izin verir. Ancak, R'nin sayısal türüne dönüştürüldükleri için, çok yüksek veya ondalık nokta değerlerine sahip değerlerle duyarlık kaybı yaşanır.
- money: Bazen cent değerleri kesin değildir ve bir uyarı verilir: Uyarı: cent değerlerini tam olarak temsil edemez.
-
sayısal/ondalık:
sp_execute_external_scriptR betiği ile bu veri türlerinin tam aralığını desteklemez ve özellikle kesirli olanlarda son birkaç ondalık basamağı değiştirerek değişikliğe neden olabilir. - bigint: R yalnızca 53 bit tamsayıları destekler ve ardından duyarlık kaybına neden olur.
rxExecBy işleviyle ilgili sorunlar - rxExecBy işlevi yüklü paketi bulamıyor
rxExecBy İşlev çağrıldığında yeni bir R çalışma zamanı işlemi başlatılır. Bu yeni işlem güncelleştirilmiş kitaplık yollarına sahip olmadığından, varsayılan kitaplık yolu dışındaki konumlara yüklenen paketler yürütme sırasında bulunmaz.
Geçici çözüm
R paketlerinin yolunun açıkça güncelleştirilmesi gerekir. Paketlerin dış kitaplıklar yoluna yüklendiğini varsayalım; kitaplık yolunu güncelleştirmek için aşağıdaki R betiği kullanılabilir: .libPaths(c(Sys.getenv("MRS_EXTLIB_USER_PATH"), Sys.getenv("MRS_EXTLIB_SHARED_PATH"), .libPaths()))
Python betiği çalıştırma sorunları
Bu bölüm, SQL Server'da Python çalıştırmaya özgü bilinen sorunların yanı sıra revoscalepy ve microsoftml gibi Microsoft tarafından yayımlanan Python paketleriyle ilgili sorunları içerir.
Modelin yolu çok uzunsa önceden eğitilmiş model çağrısı başarısız oluyor
Önceden eğitilmiş modelleri SQL Server 2017'nin (14.x) erken bir sürümünde yüklediyseniz, eğitilen model dosyasının tam yolu Python'un okuması için çok uzun olabilir. Bu sınırlama sonraki bir hizmet sürümünde düzeltilmiştir.
Çeşitli olası geçici çözümler vardır:
- Önceden eğitilmiş modelleri yüklediğinizde özel bir konum seçin.
- Mümkünse, SQL Server örneğini gibi
C:\SQL\MSSQL14.MSSQLSERVERdaha kısa bir yola sahip özel bir yükleme yolu altına yükleyin. - Model dosyasını daha kısa bir yola eşleyen bir sabit bağlantı oluşturmak için Windows yardımcı programı Fsutil'i kullanın.
- En son hizmet sürümüne güncelleştirin.
Serileştirilmiş modeli SQL Server'a kaydederken hata oluştu
Modeli uzak bir SQL Server örneğine geçirip rx_unserialize işlevini kullanarak ikili modeli okumaya çalıştığınızda şu hatayı alabilirsiniz:
NameError: 'rx_unserialize_model' adı tanımlanmadı
Serileştirme işlevinin son sürümünü kullanarak modeli kaydettiyseniz, ancak modeli seri durumdan çıkardığınız SQL Server örneği serileştirme API'sini tanımıyorsa, bu hata oluşur.
Sorunu çözmek için SQL Server 2017 (14.x) örneğini CU 3 veya sonraki bir sürüme yükseltin.
Varbinary değişkenin başlatılamaması BxlServer'de bir hataya neden olur.
kullanarak SQL Server'da sp_execute_external_scriptPython kodu çalıştırırsanız ve kodda varbinary(max), varchar(max) veya benzer türlerde çıkış değişkenleri varsa, değişkenin betiğinizin bir parçası olarak başlatılması veya ayarlanması gerekir. Aksi takdirde, BxlServer veri değişimi bileşeni bir hata oluşturur ve çalışmayı durdurur.
Bu sınırlama, gelecek bir hizmet sürümünde düzeltilecektir. Geçici bir çözüm olarak değişkenin Python betiği içinde başlatıldığından emin olun. Aşağıdaki örneklerde olduğu gibi geçerli herhangi bir değer kullanılabilir:
declare @b varbinary(max);
exec sp_execute_external_script
@language = N'Python'
, @script = N'b = 0x0'
, @params = N'@b varbinary(max) OUTPUT'
, @b = @b OUTPUT;
go
declare @b varchar(30);
exec sp_execute_external_script
@language = N'Python'
, @script = N' b = "" '
, @params = N'@b varchar(30) OUTPUT'
, @b = @b OUTPUT;
go
Python kodunun başarıyla yürütülmesiyle ilgili telemetri uyarısı
SQL Server 2017 (14.x) CU 2'den başlayarak, Python kodu aksi takdirde başarıyla çalıştırıldığında bile aşağıdaki ileti görüntülenebilir:
Dış betikten STDERR iletileri:~PYTHON_SERVICES\lib\site-packages\revoscalepy\utils\RxTelemetryLoggerSyntaxWarning: genel bildirimden önce telemetry_state kullanılır
Bu sorun SQL Server 2017 (14.x) Toplu Güncelleştirme 3'te (CU 3) düzeltilmiştir.
Sayısal, ondalık ve para veri türleri desteklenmiyor
SQL Server 2017 (14.x) Toplu Güncelleştirme 12 (CU 12) ile başlayarak, Python sp_execute_external_script kullanılırken WITH RESULT SETS içindeki numeric, decimal ve money veri türleri desteklenmez. Aşağıdaki iletiler görüntülenebilir:
[Kod: 39004, SQL Durumu: S1000] HRESULT 0x80004004 ile 'sp_execute_external_script' yürütülmesi sırasında bir 'Python' betiği hatası oluştu.
[Kod: 39019, SQL Durumu: S1000] Dış betik hatası oluştu:
SqlSatelliteCall hatası: Çıkış şemasında desteklenmeyen tür. Desteklenen türler: bit, smallint, int, datetime, smallmoney, real ve float. char, varchar veri türleri kısmen desteklenir.
Bu, SQL Server 2017 (14.x) Toplu Güncelleştirme 14 (CU 14) ile düzeltilmiştir.
Linux'ta pip ile Python paketlerini yüklerken hatalı yorumlayıcı hatası
SQL Server 2019'da (15.x), pip kullanmayı denerseniz. Örneğin:
/opt/mssql/mlservices/runtime/python/bin/pip -h
Ardından şu hatayı alırsınız:
bash: /opt/mssql/mlservices/runtime/python/bin/pip: /opt/microsoft/mlserver/9.4.7/bin/python/python: hatalı yorumlayıcı: Böyle bir dosya veya dizin yok
Geçici çözüm
Python Paket Yetkilisi'nden (PyPA)pip yükleyin:
wget 'https://bootstrap.pypa.io/get-pip.py'
/opt/mssql/mlservices/bin/python/python ./get-pip.py
Şunlar için geçerlidir: Linux üzerinde SQL Server 2019 (15.x)
Windows'a SQL Server 2019 yüklendikten sonra pip kullanılarak Python paketleri yüklenemiyor.
Windows'a SQL Server 2019 (15.x) yüklendikten sonra, DOS komut satırından pip aracılığıyla python paketi yüklemeye çalışma başarısız olur. Örneğin:
pip install quantfolio
Bu, aşağıdaki hatayı döndürür:
pip, TLS/SSL gerektiren konumlarla yapılandırılır, ancak Python'daki ssl modülü kullanılamaz.
Bu, Anaconda paketine özgü bir sorundur. Bu, gelecek bir hizmet sürümünde düzeltilecektir.
Geçici çözüm
Aşağıdaki dosyaları kopyalayın:
libssl-1_1-x64.dlllibcrypto-1_1-x64.dll
klasöründen
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\Library\bin
klasörüne
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\DLLs
Ardından yeni bir DOS komut istemcisi açın.
Şunlar için geçerlidir: Windows üzerinde SQL Server 2019 (15.x)
Linux'ta libc++abo.so olmadan sp_execute_external_script kullanırken hata veriyor
Yüklü olmayan libc++abi.so temiz bir Linux makinesinde bir (SPEES) sorgusu çalıştırma sp_execute_external_script işlemi "Böyle bir dosya veya dizin yok" hatasıyla başarısız olur.
Örneğin:
EXEC sp_execute_external_script
@language = N'Python'
, @script = N'
OutputDataSet = InputDataSet'
, @input_data_1 = N'select 1'
, @input_data_1_name = N'InputDataSet'
, @output_data_1_name = N'OutputDataSet'
WITH RESULT SETS (([output] int not null));
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'Python' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'Python' runtime.
STDERR message(s) from external script:
Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open shared object file: No such file or directory.
SqlSatelliteCall error: Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open shared object file: No such file or directory.
STDOUT message(s) from external script:
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/computecontext/RxInSqlServer.py", line 605, in rx_sql_satellite_call
rx_native_call("SqlSatelliteCall", params)
File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/RxSerializable.py", line 375, in rx_native_call
ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.
Total execution time: 00:01:00.387
Geçici çözüm
Aşağıdaki komutu çalıştırın:
sudo cp /opt/mssql/lib/libc++abi.so.1 /opt/mssql-extensibility/lib/
Şunlar için geçerlidir: Linux üzerinde SQL Server 2019 (15.x)
Ubuntu 20.04 üzerinde Linux'ta SQL Server 2022 CU6 ile sp_execute_external_script çalıştırırken genel hata
Linux için SQL Server 2022 CU6'nın Ubuntu 20.04'e yüklenmesi, R ve Python betikleri çalıştırılırken sp_execute_external_script aşağıdaki hataya neden olabilir:
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'R' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'R' runtime.
STDERR message(s) from external script:
/usr/lib/R/library/RevoScaleR/rxLibs/x64/libExaCore.so.2(_Z21CriticalSignalHandleri+0x29)[0x7f2568289d89]
/usr/lib/x86_64-linux-gnu/libc.so.6(+0x43090)[0x7f2568d66090]
Geçici çözüm
Sql Server'ın sistem tarafından sağlanan paylaşılan kitaplıkları libssl-dev ve libsslçözümlemesini sağlayan paket bağımlılığını libcryptoyüklemek için aşağıdaki komutu çalıştırın.
sudo apt-get update
sudo apt-get install libssl-dev
Linux üzerinde mssql-launchpadd çalıştırırken modprobe güvenlik duvarı kuralı oluşturma hatası
mssql-launchpadd günlüklerini sudo journalctl -a -u mssql-launchpadd kullanarak görüntülerken, aşağıdaki çıkışa benzer bir güvenlik duvarı kuralı oluşturma hatası görebilirsiniz.
-- Logs begin at Sun 2021-03-28 12:03:30 PDT, end at Wed 2022-10-12 13:20:17 PDT. --
Mar 22 16:57:51 sqlVm systemd[1]: Started Microsoft SQL Server Extensibility Launchpad Daemon.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: Extensibility Log Header: <timestamp> <process> <sandboxId> <sessionId> <message>
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: No extensibility section in /var/opt/mssql/mssql.conf file. Using default settings.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: DataDirectories = /bin:/etc:/lib:/lib32:/lib64:/sbin:/usr/bin:/usr/include:/usr/lib:/usr/lib32:/usr/lib64:/usr/libexec/gcc:/usr/sbin:/usr/share:/var/lib:/opt/microsoft:/opt/mssql-extensibility:/opt/mssql/mlservices:/opt/mssql/lib/zulu-jre-11:/opt/mssql-tools
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: [RG] SQL Extensibility Cgroup initialization is done.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: Found 1 IP address(es) from the bridge.
Mar 22 16:57:51 sqlVm launchpadd[195676]: modprobe: ERROR: could not insert 'ip6_tables': Operation not permitted
Mar 22 16:57:51 sqlVm launchpadd[195673]: ip6tables v1.8.4 (legacy): can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Mar 22 16:57:51 sqlVm launchpadd[195673]: Perhaps ip6tables or your kernel needs to be upgraded.
Mar 22 16:57:51 sqlVm launchpadd[195678]: modprobe: ERROR: could not insert 'ip6_tables': Operation not permitted
Mar 22 16:57:51 sqlVm launchpadd[195677]: ip6tables v1.8.4 (legacy): can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Mar 22 16:57:51 sqlVm launchpadd[195677]: Perhaps ip6tables or your kernel needs to be upgraded.
Mar 22 16:57:51 sqlVm launchpadd[195670]: 2022/03/22 16:57:51 [setnetbr] ERROR: Failed to set firewall rules: exit status 3
Geçici çözüm
yapılandırmak için modprobe aşağıdaki komutları çalıştırın ve SQL Server Launchpad hizmetini yeniden başlatın.
sudo modprobe ip6_tables
sudo systemctl restart mssql-launchpadd
Şunlar için geçerlidir: Linux üzerinde SQL Server 2019 (15.x) ve üzeri
tensorflow
sqlmlutils kullanarak tensorflow paketi yüklenemiyor.
Paket sqlmlutils , SQL Server 2019'da (15.x) Python paketlerini yüklemek için kullanılır.
Microsoft Visual C++ 2015-2019 Yeniden Dağıtılabilir 'i (x64) indirmeniz, yüklemeniz ve güncelleştirmeniz gerekir. Ancak, tensorflow paket kullanılarak sqlmlutilsyüklenemez. Paket, tensorflow SQL Server'da yüklü olan numpy sürümden daha yeni bir sürümüne bağlıdır. Ancak, tensorflow yüklenmeye çalışılırken güncellenemeyen numpy önceden yüklenmiş bir sistem paketidir.
Geçici çözüm
Yönetici modunda bir komut istemi kullanarak aşağıdaki komutu çalıştırın ve "MSSQLSERVER" yerine SQL Server örneğinizin adını yazın:
"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\python.exe" -m pip install --upgrade tensorflow
TLS/SSL hatası alırsanız bu makalenin önceki bölümlerinde bulunan 7. pip kullanarak Python paketlerini yükleyememe kısmına bakın.
Şunlar için geçerlidir: Windows üzerinde SQL Server 2019 (15.x)
Revolution R Enterprise ve Microsoft R Open
Bu bölümde, Revolution Analytics tarafından sağlanan R bağlantısı, geliştirme ve performans araçlarına özgü sorunlar listelenir. Bu araçlar SQL Server'ın önceki yayın öncesi sürümlerinde sağlanmıştır.
Genel olarak, bu önceki sürümleri kaldırmanızı ve SQL Server veya Microsoft R Server'ın en son sürümünü yüklemenizi öneririz.
Revolution R Enterprise desteklenmiyor
Revolution R Enterprise'ın R Services 'ın (In-Database) herhangi bir sürümüyle yan yana yüklenmesi desteklenmez.
Revolution R Enterprise lisansınız varsa, bunu hem SQL Server örneğinden hem de SQL Server örneğine bağlanmak için kullanmak istediğiniz herhangi bir iş istasyonundan ayrı bir bilgisayara yerleştirmeniz gerekir.
R Services'in (In-Database) bazı yayın öncesi sürümleri, Revolution Analytics tarafından oluşturulan Windows için bir R geliştirme ortamı içeriyordu. Bu araç artık sağlanmadı ve desteklenmiyor.
R Services (In-Database) ile uyumluluk için bunun yerine Microsoft R İstemcisi'ni yüklemenizi öneririz. Visual Studio ve Visual Studio Code için R Araçları, Microsoft R çözümlerini de destekler.
SQLite ODBC sürücüsü ve RevoScaleR ile uyumluluk sorunları
SQLite ODBC sürücüsünün 0.92 düzeltmesi RevoScaleR ile uyumsuz. 0.88-0.91 ve 0.93 ve üzeri düzeltmelerin uyumlu olduğu bilinmektedir.