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

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 จะไม่แสดงเมตริกประสิทธิภาพสำหรับคำขอ/งานที่ดำเนินการไม่สำเร็จ เนื่องจากตัวเลขเหล่านี้อาจไม่ถูกต้องหรือทำให้เข้าใจผิด ตัวอย่างเช่น หากงานดำเนินการไม่สำเร็จเนื่องจากงานของผู้ปฏิบัติงานไม่ตอบสนอง ระบบจะไม่รวมการประมวลผลของผู้ปฏิบัติงานรายนั้นไว้ในผลรวม

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

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

คำอธิบาย
คำอธิบายแบบข้อความเกี่ยวกับการประมวลผล อัลกอริทึม โหลดชิ้นงาน หรือการดำเนินการที่ทำให้เกิดค่าใช้จ่ายเพิ่มเติมซึ่งกำลังทำโปรไฟล์
จำนวน
ตัวบ่งชี้ที่สอดคล้องกับจํานวนครั้งที่มีการเรียกใช้การดำเนินการที่อธิบายใน "คําอธิบาย"
Compute
ตัวบ่งชี้เวลา EECU ที่ใช้ในการดําเนินการ
Current 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)