ภาพรวมการคํานวณ

Earth Engine สร้างขึ้นจากเครื่องมือและบริการของ Google เพื่อทำการคำนวณในวงกว้าง แพลตฟอร์มและ API ของ Earth Engine จะซ่อนความซับซ้อนส่วนใหญ่ของโครงสร้างพื้นฐานการประมวลผลแบบขนานที่สำคัญ เพื่อให้เรียกใช้การวิเคราะห์ข้อมูลเชิงพื้นที่ขนาดใหญ่ได้ง่าย

EECU

ภาพรวม

Earth Engine Compute Unit (EECU) เป็นกลไกที่แสดงถึงปริมาณพลังการประมวลผลแบบทันที Earth Engine จะติดตามคาร์บอนฟุตพริ้นท์จากการประมวลผลทั้งหมดของงานเป็นฟังก์ชันของการใช้งาน EECU ตลอดเวลา (EECU-วินาที, EECU-ชั่วโมง ฯลฯ) เนื่องจาก Google มีแกนประมวลผล สถาปัตยกรรม และอื่นๆ ที่แตกต่างกันมากมาย EECU เป็นนามธรรมที่มีประโยชน์สำหรับการพูดถึงพลังการประมวลผล

แรงจูงใจ

ผู้ใช้ EE มักต้องการประมาณปริมาณพลังการประมวลผลที่จำเป็นสำหรับเวิร์กโฟลว์ของตน และ EECU จะให้เมตริกที่สอดคล้องกันสำหรับการเปรียบเทียบ

การเปรียบเทียบกับเมตริก CPU

จำนวน ประเภท และสถาปัตยกรรมของเครื่องที่ทำงานกับผลลัพธ์หนึ่งๆ อาจเปลี่ยนแปลงได้เมื่อเวลาผ่านไป เนื่องจากคอร์จริงที่แตกต่างกันอาจมีลักษณะประสิทธิภาพที่แตกต่างกัน Earth Engine จึงสรุปการประมวลผลทั้งหมดโดยใช้ EECU EECU-hour (หรือหน่วย EECU-time อื่นๆ) ไม่สอดคล้องกับเวลาตามนาฬิกา ดังนั้นงานที่ใช้ 10 EECU-hour อาจมีรันไทม์ที่สังเกตได้เพียงไม่กี่นาที

ความเสถียรและความสามารถในการคาดการณ์

บางครั้งการส่งคำขอเดียวกัน (หรือคล้ายกัน) ไปยัง Earth Engine อาจส่งผลให้มีการคำนวณในปริมาณที่แตกต่างกันมาก ปัจจัยที่พบบ่อยซึ่งทำให้เกิดความแตกต่าง ได้แก่

  • การแคช เช่น การนำผลลัพธ์ของการคำนวณก่อนหน้ามาใช้ซ้ำ (รวมถึงผลลัพธ์บางส่วนหรือผลลัพธ์ระดับกลาง)
  • ข้อมูลพื้นฐานที่แตกต่างกัน เช่น จำนวนภาพถ่ายจากดาวเทียมที่แตกต่างกัน รูปทรงเรขาคณิตที่มีความซับซ้อนแตกต่างกัน เป็นต้น
  • การเปลี่ยนแปลงอัลกอริทึมในแพลตฟอร์ม EE รวมถึงการเพิ่มประสิทธิภาพ การแก้ไขข้อบกพร่อง ฯลฯ
  • การเปลี่ยนแปลงไลบรารีของไคลเอ็นต์ โดยเฉพาะอย่างยิ่งหากคุณใช้โค้ดหรือแพ็กเกจ EE ของผู้ใช้รายอื่น

การเปรียบเทียบ

สำรวจการเปรียบเทียบการประมวลผล Earth Engine ตัวอย่าง

เมตริกสำหรับคำขอที่ไม่สำเร็จ

Earth Engine ไม่ได้ให้เมตริกประสิทธิภาพสำหรับคำขอ/งานที่ดำเนินการไม่สำเร็จ เนื่องจากตัวเลขเหล่านี้อาจไม่ถูกต้องหรือทำให้เข้าใจผิด ตัวอย่างเช่น หากงานล้มเหลวเนื่องจากงานของผู้ปฏิบัติงานไม่ตอบสนอง การใช้การประมวลผลของผู้ปฏิบัติงานรายนั้นจะไม่สามารถนำมาพิจารณาในยอดรวมได้

เครื่องมือสร้างโปรไฟล์

เครื่องมือวิเคราะห์ประสิทธิภาพจะให้ข้อมูลเกี่ยวกับเวลา EECU และการใช้งานหน่วยความจำ (ต่ออัลกอริทึมและชิ้นงาน) ซึ่งเป็นผลมาจากการคำนวณที่ดำเนินการขณะเปิดใช้ แต่ละแถวในเอาต์พุตของเครื่องมือวิเคราะห์จะสอดคล้องกับอัลกอริทึม การคำนวณ การโหลดชิ้นงาน หรือการดำเนินการที่ใช้ทรัพยากรมากตามที่อธิบายไว้ในคอลัมน์ "คำอธิบาย" คอลัมน์ในเครื่องมือวิเคราะห์มีดังนี้

คำอธิบาย
คำอธิบายแบบข้อความของการคำนวณ อัลกอริทึม การโหลดเนื้อหา หรือการดำเนินการที่ใช้ทรัพยากรมากซึ่งกำลังสร้างโปรไฟล์
จำนวน
ตัวบ่งชี้ที่แปรผันตามจำนวนครั้งที่มีการเรียกใช้การดำเนินการที่อธิบายไว้ใน "คำอธิบาย"
Compute
ตัวบ่งชี้เวลา EECU ที่ใช้ในการดำเนินการ
Mem ปัจจุบัน

คอลัมน์นี้จะปรากฏก็ต่อเมื่อมีข้อผิดพลาดเนื่องจากสคริปต์

ใช้หน่วยความจำมากเกินไป โดยจะแสดงปริมาณหน่วยความจำที่ใช้ในโหนดการประมวลผลเดียว ณ ขณะที่เกิดข้อผิดพลาด

หน่วยความจำสูงสุด

หน่วยความจำสูงสุดที่ใช้ในโหนด Compute เดียวสำหรับการดำเนินการ

การเปิดใช้เครื่องมือวิเคราะห์ประสิทธิภาพ

ตัวแก้ไขโค้ด

ใช้ปุ่ม "เรียกใช้ด้วยเครื่องมือวิเคราะห์" ตามที่อธิบายไว้ในคู่มือตัวแก้ไขโค้ด

Python

ใส่โค้ดต่อไปนี้ในสคริปต์ Python เพื่อเปิดใช้เครื่องมือวิเคราะห์ประสิทธิภาพ

with ee.profilePrinting():
   print(ee.Number(3.14).add(0.00159).getInfo())

ระบบจะพิมพ์โปรไฟล์เมื่อบริบทสิ้นสุดลง ไม่ว่าจะมีข้อผิดพลาดเกิดขึ้นภายในบริบทหรือไม่ก็ตาม

หากต้องการบันทึกโปรไฟล์เป็นสตริง ให้เขียนโปรไฟล์ลงในบัฟเฟอร์สตริง ดังนี้

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 และ Jupyter Notebook ได้ง่ายขึ้น (โปรดทราบว่านี่เป็นเพียงแนวทางหนึ่งและอาจไม่เหมาะกับทุกกรณี)

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)