Earth Engine, Google'ın devasa ölçekte hesaplamalar yapan araç ve hizmetleri üzerine inşa edilmiştir. Earth Engine platformu ve API'si, büyük coğrafi analizlerin kolayca çalıştırılabilmesi için temel paralel işleme altyapısının karmaşıklığının büyük bir kısmını gizler.
EECU'lar
Genel Bakış
Earth Engine İşlem Birimi (EECU), anlık işlem gücü miktarını temsil eden bir mekanizmadır. Earth Engine, görevlerin toplam hesaplama ayak izini zaman içindeki EECU kullanımlarının bir fonksiyonu olarak (EECU saniye, EECU saat vb.) izler. Google'da birçok farklı türde işlemci çekirdeği, mimari vb. olduğu için EECU'lar, hesaplama gücü hakkında konuşmak için kullanışlı bir soyutlamadır.
Motivasyon
EE kullanıcıları genellikle iş akışları için gereken işlem gücü miktarı hakkında tahminlerde bulunmak ister. EECU'lar, karşılaştırma yapmak için tutarlı bir metrik sağlar.
CPU metrikleriyle karşılaştırma
Belirli bir sonuç üzerinde çalışan makinelerin sayısı, türü ve mimarisi zaman içinde değişebilir. Farklı fiziksel çekirdekler farklı performans özelliklerine sahip olabileceğinden Earth Engine, EECU'ları kullanarak tüm işlemleri soyutlar. EECU saati (veya EECU zamanının başka bir birimi) gerçek zamanla eşleşmez. Bu nedenle, 10 EECU saati tüketen bir işin gözlemlenen çalışma süresi yalnızca birkaç dakika olabilir.
Kararlılık ve öngörülebilirlik
Earth Engine'e aynı (veya benzer) istekleri göndermek bazen çok farklı miktarlarda hesaplamaya neden olabilir. Farklılıkların yaygın nedenleri şunlardır:
- önbelleğe alma (ör. önceki hesaplamaların sonuçlarını yeniden kullanma, kısmi veya ara sonuçlar dahil)
- Farklı temel veriler (ör. farklı sayıda uydu görüntüsü, farklı karmaşıklıkta geometriler vb.)
- Performans optimizasyonları, hata düzeltmeleri vb. dahil olmak üzere EE platformundaki algoritma değişiklikleri
- Özellikle diğer kullanıcıların EE koduna veya paketlerine bağlıysanız istemci kitaplıklarında yapılan değişiklikler
Karşılaştırmalar
Örnek Earth Engine hesaplama karşılaştırmalarını inceleyin.
Başarısız isteklerle ilgili metrikler
Earth Engine, başarısız istekler/görevler için performans metrikleri sağlamaz. Bu sayılar yanlış veya yanıltıcı olabilir. Örneğin, bir çalışan görevi yanıt vermediği için bir iş başarısız olursa bu çalışanın işlem tüketimi toplama dahil edilemez.
Profiler
Profil oluşturucu, etkinleştirildiğinde gerçekleştirilen hesaplamadan kaynaklanan EECU süresi ve bellek kullanımı (algoritma ve öğe başına) hakkında bilgi sağlar. Profil oluşturucu çıkışındaki her satır, "Açıklama" sütununda belirtildiği gibi bir algoritmaya, hesaplamaya, öğe yüklemeye veya ek yük işlemine karşılık gelir. Profil oluşturucudaki sütunlar şunlardır:
- Açıklama
- Profili oluşturulan hesaplama, algoritma, öğe yükü veya ek yük işleminin metin açıklaması.
- Sayı
- "Açıklama" bölümünde açıklanan işlemin kaç kez çağrıldığıyla orantılı bir gösterge.
- İşlem
- İşlemlerin kullandığı EECU süresinin göstergesi.
- Mevcut Bellek
Bu sütun yalnızca komut dosyası nedeniyle bir hata oluştuysa görünür.
çok fazla bellek kullandı. Hata oluştuğu anda tek bir işlem düğümünde kullanılan bellek miktarını gösterir.
- Maksimum Bellek
İşlem için tek bir işlem düğümünde kullanılan maksimum bellek.
Profil oluşturucuyu etkinleştirme
Kod Düzenleyici
Kod Düzenleyici kılavuzunda açıklandığı gibi "Run with Profiler" (Profil Oluşturucu ile Çalıştır) düğmesini kullanın.
Python
Profil oluşturucuyu etkinleştirmek için Python komut dosyanıza aşağıdaki kodu ekleyin:
with ee.profilePrinting():
print(ee.Number(3.14).add(0.00159).getInfo())
Bağlam içinde herhangi bir hata oluşup oluşmadığına bakılmaksızın, bağlam sona erdiğinde profil yazdırılır.
Profili dize olarak yakalamak için profili bir dize arabelleğine yazın:
import io
out = io.StringIO()
with ee.profilePrinting(destination=out) as p:
print(ee.Number(3.14).add(0.00159).getInfo())
print('Output:')
print(out.getvalue())
Colab ve Jupyter Notebooks'ta daha kolay analiz için profil dizesini tabloya dönüştürmeye yönelik bir öneriyi aşağıda bulabilirsiniz (Bunun yalnızca bir yaklaşım olduğunu ve tüm durumlar için uygun olmayabileceğini unutmayın):
import re
import pandas as pd
lines = out.getvalue().split('\n')
column_names = re.split(r'\s{1,}', lines[0])
column_names = [name.strip() for name in column_names if name.strip()]
data = [
[element for element in re.split(r'\s{2,}', line) if element.strip()]
for line in lines[1:-1]
]
df = pd.DataFrame(data, columns=column_names)
display(df)