Earth Engine dibangun di atas alat dan layanan Google untuk melakukan komputasi dalam skala besar. Untuk memudahkan menjalankan analisis geospasial besar, platform dan API Earth Engine menyembunyikan sebagian besar kompleksitas infrastruktur pemrosesan paralel yang mendasarinya.
EECU
Ringkasan
Unit Komputasi Earth Engine (EECU) adalah mekanisme untuk merepresentasikan jumlah daya pemrosesan instan. Earth Engine melacak total jejak komputasi tugas sebagai fungsi dari penggunaan EECU-nya sepanjang waktu (EECU-detik, EECU-jam, dll.). Karena Google memiliki berbagai jenis inti prosesor, arsitektur, dll., EECU menjadi abstraksi yang berguna untuk membahas daya komputasi.
Motivasi
Pengguna EE sering kali ingin membuat perkiraan tentang jumlah daya pemrosesan yang diperlukan untuk alur kerja mereka, dan EECU memberikan metrik yang konsisten untuk melakukan perbandingan.
Perbandingan dengan metrik CPU
Jumlah, jenis, dan arsitektur mesin yang mengerjakan hasil tertentu dapat berubah dari waktu ke waktu. Karena inti fisik yang berbeda dapat memiliki karakteristik performa yang berbeda, Earth Engine memisahkan semua pemrosesan menggunakan EECU. EECU-jam (atau unit waktu EECU lainnya) tidak sesuai dengan waktu jam dinding, sehingga tugas yang menggunakan 10 EECU-jam mungkin memiliki waktu proses yang diamati hanya beberapa menit.
Stabilitas dan prediktabilitas
Mengirim permintaan yang sama (atau serupa) ke Earth Engine terkadang dapat menghasilkan jumlah komputasi yang sangat berbeda. Penyebab umum perbedaan tersebut meliputi:
- caching, seperti menggunakan kembali hasil komputasi sebelumnya (termasuk hasil sebagian atau menengah)
- data pokok yang berbeda, seperti jumlah citra satelit yang bervariasi, geometri dengan kompleksitas berbeda, dll.
- perubahan algoritma pada platform EE, termasuk pengoptimalan performa, perbaikan bug, dll.
- perubahan pada library klien, terutama jika Anda bergantung pada kode atau paket EE pengguna lain
Tolok Ukur
Jelajahi tolok ukur komputasi Earth Engine sampel.
Metrik untuk permintaan yang gagal
Earth Engine tidak memberikan metrik performa untuk permintaan/tugas yang gagal, karena angka ini akan tidak akurat atau menyesatkan. Sebagai contoh, jika tugas gagal karena tugas pekerja tidak responsif, konsumsi pemrosesan pekerja tersebut tidak akan dapat dimasukkan ke dalam total.
Profiler
Profiler memberikan informasi tentang penggunaan memori dan waktu EECU (per algoritma dan aset) yang dihasilkan dari komputasi yang dilakukan saat diaktifkan. Setiap baris dalam output profiler sesuai dengan algoritma, komputasi, pemuatan aset, atau operasi overhead seperti yang dijelaskan di kolom 'Deskripsi'. Kolom di profiler adalah:
- Deskripsi
- Deskripsi tekstual tentang komputasi, algoritma, pemuatan aset, atau operasi overhead yang sedang diprofilkan.
- Jumlah
- Indikator yang proporsional dengan jumlah operasi yang dijelaskan dalam 'Deskripsi' dipanggil.
- Compute
- Indikator waktu EECU yang diambil oleh operasi.
- Memori Saat Ini
Kolom ini hanya muncul jika terjadi error karena skrip
menggunakan terlalu banyak memori. Kolom ini menampilkan jumlah memori yang digunakan di satu node komputasi pada saat error terjadi.
- Memori Puncak
Memori maksimum yang digunakan di satu node komputasi untuk operasi.
Mengaktifkan profiler
Editor Kode
Gunakan tombol "Run with Profiler", seperti yang dijelaskan dalam panduan Editor Kode.
Python
Sertakan kode berikut dalam skrip Python Anda untuk mengaktifkan profiler:
with ee.profilePrinting():
print(ee.Number(3.14).add(0.00159).getInfo())
Profil akan dicetak saat konteks berakhir, terlepas dari apakah terjadi error dalam konteks atau tidak.
Untuk mengambil profil sebagai string, tulis profil ke buffer string:
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())
Berikut saran untuk mengubah string profil menjadi tabel agar lebih mudah dianalisis di Colab dan Notebook Jupyter (perhatikan bahwa ini hanyalah satu pendekatan dan mungkin tidak sesuai untuk semua kasus):
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)