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ý quy mô lớn, nền tảng và API Earth Engine sẽ ẩn đi phần lớ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ị lượng sức mạnh xử lý tức thời. Earth Engine theo dõi tổng mức sử dụng tài nguyên điện toán của các tác vụ theo thời gian (EECU-giây, EECU-giờ, v.v.). Vì Google có nhiều loại lõi 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 lượng sức mạnh 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ố về CPU

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

Tính ổn định và khả năng dự đoán

Đôi khi, việc gửi các yêu cầu giống nhau (hoặc tương tự) đến Earth Engine có thể dẫn đến lượng tính toán rất khác nhau. Sau đây là những yếu tố 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 học 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ả việc 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 nếu bạn phụ thuộc vào mã hoặc gói EE 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 của Earth Engine.

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

Earth Engine không cung cấp các chỉ số hiệu suất cho những 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ụ khi xử lý của worker đó sẽ không thể tính vào tổng mức tiêu thụ.

Profiler

Trình phân tích hiệu suất cung cấp thông tin về thời gian EECU và mức sử dụng bộ nhớ (theo từng thuật toán và tài sản) do quá trình tính toán được thực hiện trong khi trình phân tích hiệu suất đang 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, hoạt động tải tài sản hoặc hoạt động chung như mô tả trong cột "Nội dung 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 chung đang được lập hồ sơ.
Số lượt
Một chỉ báo tỷ lệ thuận với số lần thao tác được mô tả trong phần "Nội dung 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 vì tập lệnh

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

Peak Mem

Bộ nhớ tối đa được sử dụng trên một nút tính toán bất kỳ cho hoạt động.

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

Trình soạn thảo mã

Sử dụng nút "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 lại hồ sơ dưới dạng một chuỗi, hãy ghi hồ sơ vào một 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à một đề xuất để chuyển chuỗi hồ sơ thành bảng để dễ dàng phân tích hơn trong Colab và Jupyter Notebook (xin 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)