Tổng quan về tính toán

Earth Engine được xây dựng dựa trên các công cụ và dịch vụ của Google để thực hiện các phép tính ở quy mô lớn. Để dễ dàng chạy các phân tích không gian địa lý lớn, nền tảng Earth Engine và API ẩn đi nhiều phần phức tạp của cơ sở hạ tầng xử lý song song cơ bản.

EECU

Tổng quan

Đơn vị điện toán Earth Engine (EECU) là một cơ chế biểu thị một lượng sức mạnh xử lý tức thì. Earth Engine theo dõi tổng mức hao tổn điện năng tính toán của các tác vụ dưới dạng hàm của mức sử dụng EECU theo thời gian (EECU-giây, EECU-giờ, v.v.). Vì Google có nhiều loại nhân xử lý, kiến trúc, v.v., EECU là một khái niệm trừu tượng hữu ích để nói về sức mạnh tính toán.

Động lực

Người dùng EE thường muốn ước tính mức năng lực xử lý cần thiết cho quy trình làm việc của họ và EECU cung cấp một chỉ số nhất quán để so sánh.

So sánh với các chỉ số CPU

Số lượng, loại và cấu trúc của các máy xử lý một kết quả cụ thể có thể thay đổi theo thời gian. Vì các nhân vật lý có thể có các đặc điểm hiệu suất khác nhau, nên Earth Engine sẽ tóm tắt tất cả quá trình xử lý bằng EECU. Một giờ EECU (hoặc bất kỳ đơn vị thời gian EECU nào khác) không tương ứng với thời gian đồng hồ treo tường, vì vậy, một công việc tiêu thụ 10 giờ EECU có thể có thời gian chạy được quan sát chỉ là vài phút.

Độ ổn định và khả năng dự đoán

Đôi khi, việc gửi cùng một (hoặc tương tự) yêu cầu đến Earth Engine có thể dẫn đến lượng dữ liệu tính toán rất khác nhau. Sau đây là một số nguyên nhân phổ biến dẫn đến sự khác biệt:

  • lưu vào bộ nhớ đệm, chẳng hạn như sử dụng lại kết quả của các phép tính trước đó (bao gồm cả kết quả một phần hoặc kết quả trung gian)
  • dữ liệu cơ bản khác nhau, chẳng hạn như số lượng hình ảnh vệ tinh khác nhau, hình dạng có độ phức tạp khác nhau, v.v.
  • các thay đổi về thuật toán trên nền tảng EE, bao gồm cả các biện pháp tối ưu hoá hiệu suất, sửa lỗi, v.v.
  • các thay đổi đối với thư viện ứng dụng, đặc biệt là nếu bạn phụ thuộc vào mã EE hoặc gói của người dùng khác

Điểm chuẩn

Khám phá các điểm chuẩn tính toán mẫu trên Earth Engine.

Chỉ số cho các yêu cầu không thành công

Earth Engine không cung cấp chỉ số hiệu suất cho các yêu cầu/tác vụ không thành công, vì những con số này sẽ không chính xác hoặc gây hiểu lầm. Ví dụ: nếu một công việc không thành công vì một tác vụ của worker không phản hồi, thì mức tiêu thụ xử lý của worker đó sẽ không được tính vào tổng mức tiêu thụ.

Profiler

Trình phân tích tài nguyên cung cấp thông tin về thời gian EECU và mức sử dụng bộ nhớ (theo mỗi thuật toán và tài sản) do quá trình tính toán thực hiện khi được bật. Mỗi hàng trong đầu ra của trình phân tích tài nguyên tương ứng với một thuật toán, phép tính, tải tài sản hoặc hoạt động hao tổn như mô tả trong cột "Mô tả". Các cột trong trình phân tích tài nguyên là:

Mô tả
Nội dung mô tả bằng văn bản về phép tính, thuật toán, tải tài sản hoặc hoạt động hao tổn đang được phân tích.
Số lượt
Một chỉ báo tỷ lệ với số lần thao tác được mô tả trong phần "Mô tả" được gọi.
Điện toán
Chỉ báo về thời gian EECU mà(các) thao tác đã thực hiện.
Current Mem

Cột này chỉ xuất hiện nếu có lỗi do tập lệnh

đã sử dụng quá nhiều bộ nhớ. Thẻ này cho biết dung lượng bộ nhớ đang được sử dụng trên bất kỳ nút tính toán nào tại thời điểm xảy ra lỗi.

Dung lượng bộ nhớ cao nhất

Bộ nhớ tối đa được sử dụng trên bất kỳ nút điện toán nào cho thao tác này.

Bật trình phân tích

Trình soạn thảo mã

Sử dụng nút "Run with Profiler" (Chạy bằng Trình phân tích tài nguyên), như mô tả trong Hướng dẫn về Trình soạn thảo mã.

Python

Thêm mã sau vào tập lệnh Python để bật trình phân tích tài nguyên:

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

Hồ sơ sẽ được in khi ngữ cảnh kết thúc, bất kể có lỗi nào xảy ra trong ngữ cảnh hay không.

Để ghi hồ sơ dưới dạng chuỗi, hãy ghi hồ sơ vào vùng đệm chuỗi:

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())

Dưới đây là đề xuất về cách chuyển chuỗi hồ sơ thành bảng để dễ dàng phân tích hơn trong Colab và Sổ tay Jupyter (lưu ý rằng đây chỉ là một phương pháp và có thể không phù hợp với mọi trường hợp):

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)