Earth Engine สร้างขึ้นบนเครื่องมือและบริการของ Google เพื่อทำการ คำนวณในระดับขนาดใหญ่ แพลตฟอร์มและ API ของ Earth Engine ซ่อนความซับซ้อนส่วนใหญ่ของโครงสร้างพื้นฐานการประมวลผลแบบขนานที่อยู่เบื้องหลังไว้ เพื่อให้การวิเคราะห์ข้อมูลเชิงพื้นที่ขนาดใหญ่เป็นเรื่องง่าย
EECU
ภาพรวม
หน่วยประมวลผล Earth Engine (EECU) เป็นกลไกที่ใช้แสดงปริมาณ กำลังประมวลผลแบบทันที Earth Engine จะติดตามร่องรอยการคำนวณทั้งหมดของงานเป็นฟังก์ชันของการใช้งาน EECU เมื่อเวลาผ่านไป (EECU-วินาที, EECU-ชั่วโมง ฯลฯ) เนื่องจาก Google มีคอร์ประมวลผล สถาปัตยกรรม และอื่นๆ อีกมากมายหลายประเภท EECU เป็นการแยกข้อมูลที่เป็นประโยชน์สำหรับการพูดถึง กำลังประมวลผล
แรงจูงใจ
ผู้ใช้ EE มักต้องการประมาณจำนวนกำลังประมวลผล ที่จำเป็นสำหรับเวิร์กโฟลว์ของตน และ EECU เป็นเมตริกที่สอดคล้องกันสำหรับการเปรียบเทียบ
การเปรียบเทียบกับเมตริก CPU
จำนวน ประเภท และสถาปัตยกรรมของเครื่องที่ทำงานกับผลลัพธ์หนึ่งๆ อาจเปลี่ยนแปลงเมื่อเวลาผ่านไป เนื่องจากคอร์ทางกายภาพที่แตกต่างกันอาจมีลักษณะด้านประสิทธิภาพที่แตกต่างกัน Earth Engine จึงสรุปการประมวลผลทั้งหมดโดยใช้ EECU ชั่วโมง EECU (หรือหน่วยเวลา EECU อื่นๆ) ไม่สอดคล้องกับเวลาตามนาฬิกา ดังนั้น งานที่ใช้เวลา 10 ชั่วโมง EECU อาจมีรันไทม์ที่สังเกตได้เพียง ไม่กี่นาที
ความเสถียรและความสามารถในการคาดการณ์
การส่งคำขอเดียวกัน (หรือคล้ายกัน) ไปยัง Earth Engine อาจทำให้เกิดการคำนวณในปริมาณที่แตกต่างกันมากในบางครั้ง ปัจจัยทั่วไปที่ทำให้เกิดความแตกต่าง ได้แก่
- การแคช เช่น การนำผลลัพธ์ของการคำนวณก่อนหน้ามาใช้ซ้ำ (รวมถึงผลลัพธ์บางส่วนหรือผลลัพธ์ระดับกลาง)
- ข้อมูลพื้นฐานที่แตกต่างกัน เช่น จำนวนภาพถ่ายดาวเทียมที่แตกต่างกัน รูปทรงเรขาคณิตที่มีความซับซ้อนแตกต่างกัน เป็นต้น
- การเปลี่ยนแปลงอัลกอริทึมในแพลตฟอร์ม EE ซึ่งรวมถึงการเพิ่มประสิทธิภาพ การแก้ไขข้อบกพร่อง ฯลฯ
- การเปลี่ยนแปลงในไลบรารีของไคลเอ็นต์ โดยเฉพาะอย่างยิ่งหากคุณต้องพึ่งพาโค้ดหรือแพ็กเกจ EE ของผู้ใช้รายอื่น
การเปรียบเทียบ
ดูการเปรียบเทียบการประมวลผลของ Earth Engine ตัวอย่าง
เมตริกสำหรับคำขอที่ไม่สำเร็จ
Earth Engine ไม่ได้ให้เมตริกประสิทธิภาพสำหรับคำขอ/งานที่ไม่สำเร็จ เนื่องจากตัวเลขเหล่านี้อาจไม่ถูกต้องหรือทำให้เข้าใจผิด ตัวอย่างเช่น หากงานล้มเหลวเนื่องจากงานของผู้ปฏิบัติงานไม่ตอบสนอง ระบบจะไม่สามารถนำการประมวลผลของผู้ปฏิบัติงานดังกล่าวมาพิจารณาในยอดรวมได้
เครื่องมือสร้างโปรไฟล์
Profiler จะให้ข้อมูลเกี่ยวกับเวลา EECU และการใช้งานหน่วยความจำ (ต่ออัลกอริทึมและชิ้นงาน) ซึ่งเป็นผลมาจากการคำนวณที่ดำเนินการขณะที่เปิดใช้ แต่ละแถวในเอาต์พุตของโปรไฟล์จะสอดคล้องกับอัลกอริทึม การคำนวณ การโหลดชิ้นงาน หรือการดำเนินการโอเวอร์เฮดตามที่อธิบายไว้ในคอลัมน์ "คำอธิบาย" คอลัมน์ในโปรไฟล์มีดังนี้
- คำอธิบาย
- คำอธิบายที่เป็นข้อความของการคำนวณ อัลกอริทึม การโหลดชิ้นงาน หรือ การดำเนินการโอเวอร์เฮดที่กำลังสร้างโปรไฟล์
- จำนวน
- ตัวบ่งชี้ที่สอดคล้องกับจำนวนครั้งที่มีการเรียกใช้การดำเนินการที่อธิบาย ไว้ใน "คำอธิบาย"
- Compute
- ตัวบ่งชี้เวลา EECU ที่การดำเนินการใช้
- หน่วยความจำปัจจุบัน
คอลัมน์นี้จะปรากฏขึ้นก็ต่อเมื่อมีข้อผิดพลาดเนื่องจากสคริปต์
ใช้หน่วยความจำมากเกินไป โดยจะแสดงปริมาณหน่วยความจำที่ใช้งานในโหนดการคำนวณเดียว ในขณะที่เกิดข้อผิดพลาด
- Peak Mem
หน่วยความจำสูงสุดที่ใช้ในโหนด Compute เดียวสำหรับการดำเนินการ
การเปิดใช้โปรไฟล์
ตัวแก้ไขโค้ด
ใช้ปุ่ม "เรียกใช้ด้วย Profiler" ตามที่อธิบายไว้ในคู่มือ โปรแกรมแก้ไขโค้ด
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 (โปรดทราบว่านี่เป็นเพียงวิธีหนึ่ง และอาจไม่เหมาะกับทุกกรณี)
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)