Azure Yapay Zeka Arama'te büyük veri kümelerini dizine ekleme

Note

Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.

Arama çözümünüzde büyük veya karmaşık veri kümelerini dizine almanız gerekiyorsa, bu makalede Azure Yapay Zeka Arama'te uzun süre çalışan işlemlere uyum sağlamak için stratejiler inceleniyor.

Bu stratejiler, verileri içeri aktarmaya yönelik iki temel yaklaşım hakkında bilgi sahibi olduğunuzu varsayar: verileri dizine gönderme veya arama dizin oluşturucu kullanarak desteklenen bir veri kaynağından veri çekme. Senaryonuz hesaplama açısından yoğun yapay zeka zenginleştirmesi içeriyorsa, dizin oluşturuculara beceri kümesi bağımlılığı göz önüne alındığında dizin oluşturucular gereklidir.

Bu makale, dizin ve sorgu tasarımıyla ilgili en iyi yöntemleri sunan daha iyi performansa yönelik İpuçlarını tamamlar. Yalnızca ihtiyacınız olan alanları ve öznitelikleri içeren iyi tasarlanmış bir dizin, büyük ölçekli dizin oluşturma için önemli bir önkoşuldur.

Bölüm başına daha yüksek depolama alanı için 3 Nisan 2024'e kadar oluşturulan bir arama hizmetini kullanın. Daha yüksek bölüm depolama alanından yararlanmak için eski hizmetleri de yükseltebilirsiniz.

Note

Bu makalede açıklanan stratejilerde tek bir büyük veri kaynağı olduğu varsayılır. Çözümünüz birden çok veri kaynağından dizin oluşturmayı gerektiriyorsa önerilen bir yaklaşım için bkz. Azure Yapay Zeka Arama'te birden çok veri kaynağını dizinleme.

Gönderim API’lerini kullanarak verileri dizine ekleme

İtmekBelgeler Dizini REST API'leri veya IndexDocuments yöntemi (.NET için Azure SDK) gibi API'ler, Azure Yapay Zeka Arama'teki en yaygın dizin oluşturma biçimidir. Gönderme API'sini kullanan çözümler için, uzun süre çalışan dizin oluşturma stratejisi aşağıdaki bileşenlerden birine veya her ikisine de sahiptir:

  • Belgeleri toplu olarak oluşturma
  • İş parçacıklarını yönetme

İstek başına birden çok belgeyi toplu halde işleyin

Büyük miktarda verinin dizinini oluşturmak için basit bir mekanizma, tek bir istekte birden çok belge veya kayıt göndermektir. Yükün tamamı 16 MB'ın altında olduğu sürece, bir istek toplu karşıya yükleme işleminde en fazla 1.000 belgeyi işleyebilir. Bu sınırlar, Belgeler Dizini REST API'sini veya .NET SDK'sında IndexDocuments yöntemini kullanmanız fark etmez. Api'lerden birini kullanarak her isteğin gövdesinde 1.000 belge paketleyebilirsiniz.

Belgelerin toplu işlenmesi, büyük bir veri hacminde çalışmak için gereken süreyi önemli ölçüde kısaltır. Verileriniz için en uygun toplu iş boyutunu belirlemek, dizin oluşturma hızlarını iyileştirmenin önemli bir bileşenidir. En uygun toplu iş boyutunu etkileyen iki birincil faktör şunlardır:

  • Dizininizin şeması
  • Verilerinizin boyutu

En uygun toplu iş boyutu dizininize ve verilerinize bağlı olduğundan, en iyi yaklaşım farklı toplu iş boyutlarını test ederek hangisinin senaryonuz için en yüksek dizin oluşturma hızlarına neden olduğunu belirlemektir. .NET SDK'yi kullanarak toplu iş boyutlarını test etmek için örnek kod için bkz. Öğretici: Push API ile dizin oluşturmayı iyileştirme.

İş parçacıklarını ve yeniden deneme stratejisini yönetme

Dizin oluşturucuların yerleşik iş parçacığı yönetimi vardır, ancak gönderme API'lerini kullanırken uygulama kodunuzun iş parçacıklarını yönetmesi gerekir. Özellikle hizmetinizi yakın zamanda yükselttiyseniz, daha yüksek bir fiyatlandırma katmanına geçtiyseniz veya daha yüksek bölümlere geçtiyseniz kullanılabilir kapasiteden tam olarak yararlanmak için yeterli iş parçacıkları olduğundan emin olun.

  1. İstemci kodunuzda eşzamanlı iş parçacığı sayısını artırın.

  2. Arama hizmetine isabet eden istekleri artırdığınızda, isteğin tam olarak başarılı olmadığını belirten HTTP durum kodlarıyla karşılaşabilirsiniz. Dizin oluşturma sırasında iki yaygın HTTP durum kodu şunlardır:

    • 503 Hizmet Kullanılamıyor: Bu hata, sistemin ağır yük altında olduğu ve isteğinizin şu anda işlenemeyeceği anlamına gelir.

    • 207 Çoklu Durum: Bu hata, bazı belgelerin başarılı olduğu, ancak en az birinin başarısız olduğu anlamına gelir.

  3. Hataları işlemek için isteklerin üstel geri alma yeniden deneme stratejisi kullanılarak yeniden denenmesi gerekir.

Azure .NET SDK'sı 503'leri ve diğer başarısız istekleri otomatik olarak yeniden dener, ancak 207'leri yeniden denemek için kendi mantığınızı uygulamanız gerekir. Polly gibi açık kaynak araçlar da bir yeniden deneme stratejisi uygulamak için kullanılabilir.

Dizin oluşturucuları ve çekme API'lerini kullanma

Dizin oluşturucular , uzun süre çalışan işlemler için yararlı olan çeşitli özellikler sunar:

  • Belgeleri toplu olarak oluşturma
  • Bölümlenmiş veriler üzerinde paralel dizin oluşturma
  • Zaman içinde yalnızca yeni ve değiştirilmiş belgelerin dizinini oluşturmak için zamanlama ve değişiklik algılama

Dizin oluşturucu zamanlamaları, bilinen son durdurma noktasında işlemeye devam edebilir. Veriler işleme penceresinde tam olarak dizine alınmazsa, değişiklik algılaması sağlayan bir veri kaynağı kullandığınız varsayılarak dizin oluşturucu bir sonraki çalıştırmada kaldığı yerden devam eder.

Verilerin daha küçük ayrı veri kaynaklarına bölümlenmesi paralel işlemeye olanak tanır. Azure Blob Depolama'daki birden çok kapsayıcı gibi kaynak verileri ayırabilir, her bölüm için bir veri kaynağı oluşturabilir ve ardından arama hizmetinizin arama birimi sayısına bağlı olarak dizin oluşturucuları paralel olarak çalıştırabilirsiniz.

Dizinleyici toplu iş boyutunu kontrol et

Gönderme API'sinde olduğu gibi dizin oluşturucular da toplu iş başına öğe sayısını yapılandırmanıza olanak sağlar. Dizin Oluşturma REST API’sine dayalı dizin oluşturucular için, bu ayarı verilerinizin özelliklerine daha iyi uyacak şekilde özelleştirmek üzere batchSize bağımsız değişkenini ayarlayın.

Varsayılan toplu iş boyutları veri kaynağına özeldir. Azure SQL Veritabanı ve Azure Cosmos DB'nin varsayılan toplu iş boyutu 1.000'tir. Buna karşılık, Azure Blob ve SharePoint (Önizleme) dizinleme, daha büyük ortalama belge boyutu dikkate alınarak toplu iş boyutunu 10 belge olarak ayarlar.

Uzun süreli çalışan işlemler için dizin oluşturucuları programlamak

Dizin oluşturucu zamanlaması, büyük veri kümelerini işlemeye ve zenginleştirme işlem hattında görüntü analizi gibi yavaş çalışan işlemleri kabul etmeye yönelik önemli bir mekanizmadır.

Dizin oluşturucu işleme genellikle iki saatlik bir süre içinde çalıştırılır. Dizin oluşturma iş yükünün tamamlanması saatler yerine günler sürüyorsa, dizin oluşturucuyu iki saatte bir başlayan ardışık, yinelenen bir zamanlamaya yerleştirebilirsiniz. Veri kaynağında değişiklik izlemenin etkinleştirildiği varsayıldığında, dizin oluşturucu işlemeye en son kaldığı yerden devam eder. Bu tempoda, dizin oluşturucu tüm işlenmemiş belgeler işlenene kadar birkaç gün boyunca bir belge yığınağında çalışabilir. Bu örüntü, özellikle ilk çalıştırma sırasında veya sadece blob listeleme aşamasının bile birkaç saat veya gün sürebileceği büyük blob kapsayıcılarının dizinini oluştururken önemlidir. Bu süre boyunca dizin oluşturucu hiçbir blobun işlenmekte olduğunu göstermez; ancak bir hata bildirilmediyse büyük olasılıkla hâlâ blob listesi üzerinde yineleme yapıyordur. Belge işleme ve zenginleştirme yalnızca bu aşama tamamlandıktan sonra başlar ve bu davranış beklenir.

{
    "dataSourceName" : "hotels-ds",
    "targetIndexName" : "hotels-idx",
    "schedule" : { "interval" : "PT2H", "startTime" : "2024-01-01T00:00:00Z" }
}

Veri kaynağında artık yeni veya güncelleştirilmiş belge kalmadığında, dizin oluşturucu yürütme geçmişi işlenen belgeleri raporlar 0/0 ve hiçbir işlem gerçekleşmez.

Zamanlamaları ayarlama hakkında daha fazla bilgi için bkz. Dizin Oluşturucu REST API'sini oluşturma veya bkz. Azure Yapay Zeka Arama için dizin oluşturucuları zamanlama.

Note

Maksimum işleme penceresi, dizin oluşturucunun beceri kümesine sahip olup olmadığına bağlıdır. Beceri kümelerine sahip dizin oluşturucular, en fazla 2 saat süreyle dahili olarak yönetilen çok kiracılı bir ortamda çalıştırılır. Paylaşılan özel bağlantıları kullanacak şekilde yapılandırılan dizin oluşturucular en fazla 24 saat çalışır. Beceri kümesi olmayan dizin oluşturucular en fazla 24 saat boyunca çalışır.

Dizin oluşturucunuz zenginleştirme önbelleğine sahip bir beceri kümesi kullanıyorsa, büyük ölçekli iş yükleri için önbelleği etkinleştirmeden önce aşağıdaki bilgileri gözden geçirin.

Caution

Uzun süre çalışan becerilere, yinelenen kesintilere veya sık hatalara sahip iş yükleri için zenginleştirme önbelleği ilk alım veya kurtarma sırasında toplam yeniden işlemeyi artırabilir. Zenginleştirme önbelleği yedekleme değildir ve hangi belgelerin işlenmesinin tamamlandığını izlemez.

Dizin oluşturucuları paralel olarak çalıştırma

Verilerinizi bölümlerseniz, her veri kaynağından çekip aynı arama dizinine yazan birden çok dizin oluşturucu-veri kaynağı bileşimi oluşturabilirsiniz. Her dizin oluşturucu ayrı olduğundan, bunları aynı anda çalıştırabilirsiniz, böylece bir arama dizinini sıralı olarak çalıştırdığınızdan daha hızlı doldurursunuz.

Yeterli kapasiteye sahip olduğunuzdan emin olun. Hizmetinizdeki bir arama birimi herhangi bir zamanda bir dizin oluşturucu çalıştırabilir. Birden çok dizin oluşturucu oluşturmak yalnızca paralel olarak çalıştırabiliyorlarsa yararlıdır.

Aynı anda çalıştırabilen dizin oluşturma işlerinin sayısı, metin tabanlı ve beceri tabanlı dizin oluşturma için farklılık gösterir. Daha fazla bilgi için bkz. Dizin oluşturucu yürütme.

Veri kaynağınız bir Azure Blob Depolama kapsayıcısı veya Azure Data Lake Storage 2. Nesil ise, bu işlem tamamlanana kadar çok sayıda blobun numaralandırılıyor olması uzun zaman (hatta saat) sürebilir. Sonuç olarak, dizin oluşturucunuzun başarılı belge sayısı bu süre boyunca artmıyor gibi görünüyor ve bu sırada herhangi bir ilerleme kaydedemiyor gibi görünüyor olabilir. Belge işlemenin çok sayıda blob için daha hızlı olmasını istiyorsanız, verilerinizi birden çok kapsayıcıya bölmeyi ve tek bir dizine işaret eden paralel dizin oluşturucular oluşturmayı göz önünde bulundurun.

  1. Azure portalında arama hizmetinize gidin.

  2. Arama hizmetiniz tarafından kullanılan arama birimi sayısını denetleyin. Sayfanın üst kısmındaki sayıyı görüntülemek için Ayarlar>Ölçeği'ni seçin. Paralel olarak çalışan dizin oluşturucu sayısı, arama birimi sayısına yaklaşık olarak eşittir.

  3. Kaynak verileri birden çok kapsayıcı veya aynı kapsayıcı içindeki birden çok sanal klasör arasında bölümleme.

  4. Her bölüm için bir tane olmak üzere kendi dizin oluşturucuyla eşleştirilmiş birden çok veri kaynağı oluşturun.

  5. Her dizin oluşturucuda aynı hedef arama dizinini belirtin.

  6. Dizin oluşturucuları zamanlayın.

  7. Onay için dizin oluşturucu durumunu ve yürütme geçmişini gözden geçirin.

Paralel dizin oluşturmayla ilgili bazı riskler vardır. İlk olarak, dizin oluşturmanın arka planda çalışmadığını ve bu da sorguların kısıtlanma veya bırakılma olasılığını artırdığını hatırlayın.

İkincisi, Azure Yapay Zeka Arama güncelleştirmeler için dizini kilitlemez. Eşzamanlı yazma işlemleri, belirli bir yazma işlemi ilk denemede başarılı olmazsa yeniden deneme çağrılarak yönetilir, ancak dizin oluşturma hatalarında bir artış fark edebilirsiniz.

Birden çok indexer-data-source kümesi aynı dizini hedeflese de, dizindeki mevcut değerlerin üzerine yazabilen dizin oluşturucu çalıştırmalarına dikkat edin. İkinci bir dizin oluşturucu-veri kaynağı aynı belgeleri ve alanları hedeflerse, ilk çalıştırmadaki tüm değerlerin üzerine yazılır. Alan değerleri tamamen değiştirilir; dizin oluşturucu, birden fazla işlemdeki değerleri aynı alanda entegre edemez.

Spark'ta büyük veri dizini oluşturma

Büyük bir veri mimariniz varsa ve verileriniz bir Spark kümesindeyse verileri yüklemek ve dizin oluşturmak için SynapseML kullanın. Eğitici, yapay zeka zenginleştirmesi için Foundry Tools'u çağırma adımlarını içerir, ancak metin indeksleme amacıyla AzureSearchWriter API'sini de kullanabilirsiniz.