From 609847767f717e43d831ddaa29bb2fd0fa242845 Mon Sep 17 00:00:00 2001 From: Victor Phan Date: Wed, 4 Mar 2026 23:26:06 +0700 Subject: [PATCH] =?UTF-8?q?th=C3=AAm=20ch=E1=BB=A9c=20n=C4=83ng=20train=20?= =?UTF-8?q?tr=C3=AAn=20odc=20predict=20tr=C3=AAn=20planetary?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...train_DecisionTree_PlanetaryComputer.ipynb | 105 +++++++++++------- 1 file changed, 67 insertions(+), 38 deletions(-) diff --git a/train_files/01.train_DecisionTree_PlanetaryComputer.ipynb b/train_files/01.train_DecisionTree_PlanetaryComputer.ipynb index cf1818e..8c74ded 100644 --- a/train_files/01.train_DecisionTree_PlanetaryComputer.ipynb +++ b/train_files/01.train_DecisionTree_PlanetaryComputer.ipynb @@ -7,22 +7,27 @@ "source": [ "# 🌍 Decision Tree Land Classification - Planetary Computer\n", "\n", - "## 📌 Notebook này có thể chạy trên:\n", - "- ✅ **Local machine** (không cần ODC database)\n", - "- ✅ **Server ODC/JupyterHub** (có ODC database)\n", + "## 📌 Notebook này chạy trên:\n", + "- ✅ **Server ODC/JupyterHub** với Dask Gateway\n", + "- ✅ Load dữ liệu từ **Microsoft Planetary Computer** (không cần ODC database)\n", "\n", "## 🎯 Nguồn dữ liệu:\n", "**Microsoft Planetary Computer STAC API**\n", "- Sentinel-2 L2A (optical)\n", "- Sentinel-1 RTC (SAR)\n", "\n", + "## 🚀 Infrastructure:\n", + "- **Dask Gateway**: Adaptive scaling (1-10 workers)\n", + "- **Datacube**: Initialized nhưng không dùng để load data\n", + "- **S3 Access**: Configured với requester_pays\n", + "\n", "## 🔄 Workflow:\n", - "1. Load data từ Planetary Computer (STAC)\n", + "1. Load data từ Planetary Computer (STAC API)\n", "2. Preprocessing (cloud mask, NDVI, resampling)\n", "3. Train Decision Tree model\n", "4. Evaluate & save model\n", "\n", - "---" + "---\n" ] }, { @@ -39,6 +44,10 @@ "import os\n", "sys.path.insert(0, '/media/x79/2A7D-FAA0/remote-sensing')\n", "\n", + "# Import ODC modules for Dask Gateway and Datacube\n", + "import datacube\n", + "from deafrica_tools import notebook_utils\n", + "\n", "# Import module load dữ liệu không cần ODC database\n", "import importlib\n", "import load_data_no_odc\n", @@ -71,12 +80,9 @@ "import json\n", "from datetime import datetime\n", "\n", - "# Dask for parallel processing\n", - "from dask.distributed import Client, LocalCluster\n", - "\n", "print(\"✅ All modules loaded successfully!\")\n", "print(\"📡 Data source: Microsoft Planetary Computer\")\n", - "print(\"💻 Environment: Local or Remote compatible\")" + "print(\"🚀 Infrastructure: Dask Gateway + ODC\")\n" ] }, { @@ -84,9 +90,9 @@ "id": "53397b2f", "metadata": {}, "source": [ - "## 🚀 Step 1: Initialize Dask Cluster\n", + "## 🚀 Step 1: Initialize Dask Gateway + Datacube\n", "\n", - "Khởi tạo Dask local cluster để xử lý song song" + "Khởi tạo Dask Gateway với adaptive scaling và cấu hình S3 access\n" ] }, { @@ -96,20 +102,24 @@ "metadata": {}, "outputs": [], "source": [ - "# Khởi tạo Dask LocalCluster\n", - "print(\"🚀 Initializing Dask LocalCluster...\")\n", + "%%time\n", "\n", - "cluster = LocalCluster(\n", - " n_workers=4,\n", - " threads_per_worker=1,\n", - " memory_limit='4GB'\n", - ")\n", - "client = Client(cluster)\n", + "print(\"🚀 Step 1: Dask Gateway + Datacube Initialization\")\n", + "print(\"=\" * 70)\n", "\n", - "print(f\"✅ Dask cluster ready!\")\n", - "print(f\" Workers: {len(cluster.workers)}\")\n", - "print(f\" Dashboard: {client.dashboard_link}\")\n", - "print(\"=\" * 70)" + "# Cấu hình Dask Gateway\n", + "cluster, client = notebook_utils.initialize_dask(use_gateway=True, workers=(1, 10))\n", + "\n", + "# Khai báo Datacube\n", + "dc = datacube.Datacube()\n", + "\n", + "# Cấu hình truy cập dịch vụ S3\n", + "notebook_utils.configure_s3_access(aws_unsigned=False, requester_pays=True, client=client)\n", + "\n", + "print(f\"\\n✅ Dask Gateway + Datacube + S3 ready!\")\n", + "print(f\" Dask dashboard: {client.dashboard_link}\")\n", + "print(f\" Workers: Adaptive scaling (1-10)\")\n", + "print(\"=\" * 70)\n" ] }, { @@ -631,13 +641,13 @@ "metadata": {}, "outputs": [], "source": [ - "# Close Dask cluster\n", + "# Close Dask Gateway cluster\n", "try:\n", " client.close()\n", " cluster.close()\n", - " print(\"✅ Dask cluster closed.\")\n", + " print(\"✅ Dask Gateway cluster closed.\")\n", "except Exception as e:\n", - " print(f\"⚠ Error closing cluster: {e}\")" + " print(f\"⚠ Error closing cluster: {e}\")\n" ] }, { @@ -650,23 +660,42 @@ "## ✅ Summary\n", "\n", "### Notebook này:\n", - "- ✅ Load dữ liệu từ **Microsoft Planetary Computer**\n", - "- ✅ Không cần **ODC Database**\n", - "- ✅ Có thể chạy trên **local machine** hoặc **server ODC**\n", + "- ✅ Chạy trên **Server ODC/JupyterHub** với **Dask Gateway**\n", + "- ✅ Load dữ liệu từ **Microsoft Planetary Computer** qua STAC API\n", + "- ✅ Không cần **ODC Database** để load data (dùng Planetary Computer)\n", + "- ✅ Sử dụng infrastructure của ODC (Dask Gateway, S3 access)\n", "- ✅ Tương thích 100% với dữ liệu ODC\n", "\n", + "### Ưu điểm của approach này:\n", + "1. **Scalability**: Dask Gateway adaptive scaling (1-10 workers)\n", + "2. **Public data**: Planetary Computer không cần VPN/private network\n", + "3. **Consistent**: Cùng infrastructure với ODC training pipeline\n", + "4. **Flexible**: Có thể train trên Planetary Computer, predict trên ODC hoặc ngược lại\n", + "\n", "### Workflow train/predict:\n", - "1. **Train trên server ODC**: Chạy notebook này với training data đầy đủ\n", - "2. **Save model**: Export `.joblib` file\n", - "3. **Predict trên local**: Load model và sử dụng cùng `load_data_no_odc.py` để load dữ liệu mới\n", + "1. **Train trên server ODC**: Chạy notebook này với Dask Gateway\n", + "2. **Save model**: Export `.joblib` file \n", + "3. **Predict qua API**: api_server.py tự động dùng Planetary Computer\n", "\n", - "### Next steps:\n", - "1. Cập nhật `train_path` với đường dẫn training data thực tế\n", - "2. Uncomment các TODO cells\n", - "3. Run notebook để train model\n", - "4. Test prediction trên local machine\n", + "### Architecture:\n", + "```\n", + "┌─────────────────────────────────────┐\n", + "│ TRAINING (ODC Infrastructure) │\n", + "│ ✅ Dask Gateway (1-10 workers) │\n", + "│ ✅ Planetary Computer STAC API │\n", + "│ ✅ S3 access configured │\n", + "│ → Model: .joblib │\n", + "└─────────────────────────────────────┘\n", + " ↓\n", + "┌─────────────────────────────────────┐\n", + "│ PREDICTION (API Server) │\n", + "│ ✅ Planetary Computer (public) │\n", + "│ ✅ Same preprocessing pipeline │\n", + "│ → GeoTIFF output │\n", + "└─────────────────────────────────────┘\n", + "```\n", "\n", - "---" + "---\n" ] } ],