Chế độ kiểm soát chi phí

Trang này mô tả cách đặt hạn mức hằng ngày và theo dõi thời gian EECU đang diễn ra để giúp kiểm soát chi phí tính toán trong Earth Engine.

Giới hạn thời gian sử dụng EECU hằng ngày

Để kiểm soát chi phí Earth Engine, bạn có thể đặt giới hạn về lượng thời gian EECU mà dự án của bạn được phép sử dụng trong một ngày bằng cách cập nhật Hạn mức trên đám mây sau đây:

  • Earth Engine compute time (EECU-time) per day in seconds: Hạn mức ở cấp dự án, giới hạn tổng thời gian EECU của tất cả người dùng trong một dự án.

Để biết thêm thông tin về hạn mức Earth Engine mà bạn có thể đặt, hãy xem bài viết Hạn mức Earth Engine.

Đặt giới hạn hằng ngày

Bạn có thể xem và chỉnh sửa hạn mức trên trang Hạn mức và giới hạn hệ thống của bảng điều khiển Cloud Google. Khi bạn điều chỉnh hạn mức, thay đổi sẽ có hiệu lực trong vòng vài phút. Để đặt hoặc cập nhật giới hạn hằng ngày, hãy làm như sau:

  1. Xác minh rằng bạn có Quyền thay đổi hạn mức dự án đối với dự án đã chọn.
  2. Chuyển đến trang Hạn mức của bảng điều khiển Cloud.
  3. Sử dụng bộ lọc Chỉ số trong hộp tìm kiếm Bộ lọc để lọc earthengine.googleapis.com/daily_eecu_usage_time. Nếu bạn không thấy hạn mức Earth Engine compute time (EECU-time) per day in seconds, hãy xác minh rằng bạn đã bật Earth Engine API cho dự án đã chọn.
  4. Nhấp vào Chỉnh sửa hạn mức trong trình đơn có biểu tượng ba dấu chấm.
  5. Nếu hộp đánh dấu Không giới hạn được chọn, hãy bỏ chọn hộp này.
  6. Nhập giới hạn mà bạn muốn tính bằng EECU-giây vào trường Giá trị mới. Nhấp vào Gửi yêu cầu.

Để biết thêm thông tin về cách xem và quản lý hạn mức, hãy xem bài viết Xem và quản lý hạn mức.

Thông báo lỗi được trả về

Sau khi bạn đặt giới hạn hằng ngày, Earth Engine sẽ trả về thông báo lỗi sau đây khi bạn vượt quá giới hạn đó:

Mức sử dụng của bạn đã vượt quá hạn mức tuỳ chỉnh cho "earthengine.googleapis.com/daily_eecu_usage_time". Quản trị viên có thể điều chỉnh hạn mức này trong bảng điều khiển Cloud: https://console.cloud.google.com/quotas/?project=_.

Khi vượt quá hạn mức, các yêu cầu của Earth Engine sẽ không thành công cho đến khi hạn mức được đặt lại vào ngày tiếp theo hoặc quản trị viên tăng hạn mức.

Giám sát và cảnh báo chi tiết

Nếu bạn cần kiểm soát và theo dõi chi phí ở mức chi tiết hơn so với giới hạn hằng ngày, thì các công thức sau đây cần nhiều bước thiết lập hơn nhưng cho phép cảnh báo và huỷ ở cấp workload_tag và cấp tác vụ hàng loạt.

Các công thức này sử dụng tính năng giám sát thời gian EECU đang diễn ra, được hiển thị cho các yêu cầu đang chạy. Hãy xem hướng dẫn Giám sát mức sử dụng để biết thêm thông tin về báo cáo thời gian EECU đang diễn ra trong Cloud Monitoring.

Định cấu hình cảnh báo

Bạn có thể định cấu hình cảnh báo trong Cloud Monitoring để cảnh báo khi một chỉ số đạt đến một ngưỡng nhất định. Hệ thống cảnh báo của Cloud Monitoring rất linh hoạt. Chúng tôi đã thu thập một số công thức nấu ăn yêu thích tại đây, nhưng bạn có thể thoải mái nấu ăn với các cấu hình tuỳ chỉnh phù hợp với nhu cầu của mình.

Công thức: Thông báo trò chuyện khi sử dụng workload_tag

Ví dụ này cho thấy cách thiết lập thông báo trò chuyện (ví dụ: tin nhắn Google Chat hoặc tin nhắn Slack) nếu mức sử dụng điện toán Earth Engine cho một workload_tag nhất định vượt quá một ngưỡng. Điều này có thể hữu ích trong trường hợp bạn có một nhóm các tác vụ xuất tạo dữ liệu cho dịch vụ sản xuất của mình và bạn muốn nhận được thông báo nếu các tác vụ này cùng nhau tiêu thụ nhiều hơn một lượng thời gian EECU nhất định.

  1. Truy cập vào trang Cảnh báo trong phần Giám sát đám mây của bảng điều khiển Cloud.
  2. Chọn "Tạo chính sách" để thiết lập một chính sách cảnh báo mới.
  3. Chọn chỉ số:
    • Số giây EECU đang xử lý là số giây tính toán đang chờ xử lý (chưa thành công).
    • Bạn có thể cần bỏ chọn bộ lọc "Đang hoạt động" để xem chỉ số này.
  4. Thêm bộ lọc:
    • Sử dụng workload_tag == your_workload_tag_value để lọc theo một thẻ tải cụ thể.
    • Sử dụng compute_type = batch hoặc compute_type = online để lọc theo một loại phép tính cụ thể.
  5. Chọn giá trị "Khoảng thời gian tích luỹ" phù hợp. Nếu bạn không chắc chắn, hãy sử dụng 5 min.
  6. Chọn "Sum" (Tổng) trong trình đơn "Rolling window function" (Hàm cửa sổ trượt). Cấu hình của một chỉ số cho cảnh báo
  7. Chọn trình kích hoạt cảnh báo và đặt tên cho trình kích hoạt đó.
  8. Chọn kênh thông báo.
    • Đối với công thức này, chúng ta sẽ chọn "Quản lý kênh thông báo" trong cửa sổ phương thức, sau đó chọn "Thêm mới" để dán mã nhận dạng không gian của Google Chat. Bạn có thể tìm thấy mã nhận dạng này trong URL của trang Gmail hoặc Chat khi xem cuộc trò chuyện.
    • Nếu sử dụng Google Chat, bạn cũng cần nhập @Google Cloud Monitoring rồi chọn ứng dụng để thêm ứng dụng Cảnh báo vào Không gian (nếu tổ chức của bạn cho phép).
  9. Chọn chính sách và nhãn mức độ nghiêm trọng có liên quan.
  10. Viết một đoạn trích ngắn về tài liệu.
  11. Xuất bản chính sách cảnh báo mới!

Sau khi thiết lập, bạn sẽ nhận được cảnh báo trong không gian trò chuyện bất cứ khi nào dự án của bạn vượt quá ngưỡng.

Công thức: Nhận thông báo qua email về tổng thời gian EECU đang diễn ra

Làm theo hướng dẫn về thông báo trò chuyện, nhưng thực hiện 2 thay đổi:

  1. Bỏ qua bước thêm bộ lọc workload_tag để có thể xem tất cả các giá trị.
  2. Khi chọn một kênh thông báo, thay vì định cấu hình kênh trò chuyện, hãy thêm địa chỉ email của bạn.

Độ trễ và thời gian cảnh báo

Xin lưu ý rằng có một chút chậm trễ trong việc truyền tải Báo cáo giám sát, vì vậy, bạn không nên mong đợi nhận được thông báo ngay lập tức.

Huỷ các tác vụ tiêu tốn nhiều tài nguyên

Trong giới hạn cho phép, bạn có thể dùng Earth Engine API để định kỳ kiểm tra danh sách các tác vụ đang chờ xử lý và yêu cầu huỷ mọi tác vụ đang chạy vượt quá giới hạn EECU-giây.

Công thức: Chạy một đoạn mã trong sổ tay hoặc trình bao Python cục bộ

eecu_seconds_limit = 50 * 60 * 60  # 50 hours
print("Watching for operations to cancel...")
while(True):
  for op in ee.data.listOperations():
    if op['metadata']['state'] == 'RUNNING':
      if op['metadata'].get('batchEecuUsageSeconds', 0) > eecu_seconds_limit:
        print(f"Cancelling operation {op['name']}")
        ee.data.cancelOperation(op['name'])
  time.sleep(10)  # 10 seconds