azure-blod作為硬碟儲存訓練照片

建立 Azure Blob Storage 其實包含兩個主要步驟:首先要建立一個 「儲存體帳戶 (Storage Account)」,然後在該帳戶底下建立 「容器 (Container)」(這個容器才是真正用來放檔案的地方)。

以下是透過 Azure Portal (網頁介面) 最簡單的建立流程:

第一階段:建立儲存體帳戶 (Storage Account)

  1. 登入 Azure Portal

  2. 在上方搜尋列輸入 “Storage accounts” (或是 “儲存體帳戶”) 並點擊進入。

  3. 點擊左上角的 「+ Create (+ 建立)」

  4. 填寫基本資訊 (Basics):

    • **Subscription (訂用帳戶)**:選擇您的付費帳戶。
    • **Resource Group (資源群組)**:點擊 “Create new”,取個名字(例如 rg-my-training-data)。這是用來分類資源的群組。
    • Storage account name (帳戶名稱)最重要的一步
      • 必須是全球唯一(不能跟別人重複)。
      • 只能用小寫英文數字
      • 長度 3~24 字元。
    • **Region (區域)**:選擇離您(或您的 VM)最近的地方,例如 Japan East (日本東部) 或 **East Asia (香港)*(注意:台灣目前可能沒有公開的區域可選,除非您有特殊權限,通常選日本或香港速度最快)*。
    • **Performance (效能)**:選 Standard (標準) 即可。
      • Premium (進階) 適合極低延遲需求,但較貴,存照片用 Standard 就夠了。
    • **Redundancy (備援)**:
      • **LRS (本地備援)**:最便宜,資料在同一機房複製 3 份。
      • **GRS (異地備援)**:較貴,資料會複製到另一個國家(防地震)。
      • 建議:測試用選 LRS,正式重要資料選 GRS。
  5. 點擊下方的 「Review + create (檢閱 + 建立)」,確認無誤後點擊 「Create (建立)」

  6. 等待幾分鐘部署完成,點擊 「Go to resource (前往資源)」


第二階段:建立容器 (Container)

有了帳戶後,您需要一個「容器」來分類檔案(這就像是 Windows 的資料夾,或者是 AWS S3 的 Bucket)。

  1. 在剛剛建立好的儲存體帳戶頁面,左側選單找到 「Data storage (資料儲存體)」 -> 「Containers (容器)」
  2. 點擊上方的 「+ Container」
  3. **Name (名稱)**:取個名字,例如 photostraining-data(只能小寫、數字、連字號)。
  4. **Public access level (公用存取層級)**:
    • Private (no anonymous access)強烈建議選這個。這代表只有擁有金鑰或登入的人才能存取(最安全)。
    • Blob / Container:這會讓檔案變成公開網址,任何人拿到網址都能下載(除非您要做公開網站,否則不要選)。
  5. 點擊 「Create (建立)」

恭喜!您現在已經有一個可以上傳照片的地方了。


第三階段:取得連線資訊 (給 BlobFuse2 或程式使用)

為了讓您的 Docker、BlobFuse2 或 Python 程式能連線到這裡,您需要 **金鑰 (Key)**。

  1. 在儲存體帳戶頁面,左側選單找到 「Security + networking (安全性 + 網路)」 -> 「Access keys (存取金鑰)」
  2. 您會看到 key1key2(兩個都可以用)。
  3. 點擊 「Show (顯示)」
  4. 複製 Connection string (連接字串) 或 **Key (金鑰)**。

在 BlobFuse2 的 config.yaml 設定中:

  • account-name: 您在第一階段設定的帳戶名稱。
  • account-key: 剛剛複製的 Key 內容。
  • container: 您在第二階段建立的容器名稱 (例如 photos)。

進階小提示 (省錢設定)

既然您是要存「訓練用的照片」,通常是寫入一次,讀取多次。您可以在建立帳戶時(或建立後),注意 Access Tier (存取層) 的設定:

  • Hot (熱):預設值。儲存費稍高,讀寫費較低。適合正在訓練中的資料。
  • Cool (冷):儲存費較低,讀寫費稍高。適合存著備用,幾個月才讀一次的資料。

如果您的照片是長期封存,建議設定 Lifecycle Management (生命週期管理),讓超過 30 天沒用的檔案自動轉成 Cool Tier 以節省費用。

將 BlobFuse2 掛載為 Linux 檔案系統主要分為三個步驟:安裝設定設定檔 (config.yaml)、以及執行掛載

相比舊版 (v1),BlobFuse2 效能更好且功能更完整,以下是詳細操作流程:

1. 安裝 BlobFuse2

BlobFuse2 需要 fuse3 函式庫支援。以下以 Ubuntu 為例 (其他發行版請參考微軟官方 Repo):

1
2
3
4
5
6
7
# 1. 設定微軟的 Package Repository (以 Ubuntu 22.04 為例)
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update

# 2. 安裝 BlobFuse2 與 Fuse3
sudo apt-get install fuse3 libfuse3-dev blobfuse2

2. 準備設定檔 (config.yaml)

BlobFuse2 推薦使用 YAML 格式的設定檔。請在任意位置(例如 ~/blobfuse2-config.yaml)建立檔案,並貼上以下內容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
allow-other: true  # 允許其他使用者(包含 Docker)存取,非常重要
logging:
type: syslog
level: log_warning

components:
- libfuse
- file_cache
- attr_cache
- azstorage

libfuse:
attribute-expiration-sec: 120
entry-expiration-sec: 120
negative-entry-expiration-sec: 240

file_cache:
path: /mnt/blobfuse_cache # 本地快取路徑 (建議使用 SSD)
timeout-sec: 120
max-size-mb: 10240 # 快取最大空間 (MB)

attr_cache:
timeout-sec: 7200

azstorage:
type: block
account-name: <你的儲存帳戶名稱>
account-key: <你的儲存帳戶金鑰>
endpoint: https://<你的儲存帳戶名稱>.blob.core.windows.net
mode: key
container: <你要掛載的容器名稱>

關鍵設定說明:

  • path: 快取資料夾,請確保該目錄存在 (sudo mkdir -p /mnt/blobfuse_cache) 且有寫入權限。
  • allow-other: 如果你要給 Docker 或非 root 使用者讀取,此項必須為 true

3. 執行掛載

建立掛載點目錄並執行掛載指令:

1
2
3
4
5
6
# 1. 建立掛載點
sudo mkdir -p /mnt/my_blob_container

# 2. 執行掛載
# 語法:sudo blobfuse2 mount <掛載點> --config-file=<設定檔路徑>
sudo blobfuse2 mount /mnt/my_blob_container --config-file=./blobfuse2-config.yaml

4. 常見問題與權限設定 (重要)

如果您遇到 “Permission denied” 或 Docker 無法讀取的問題,請檢查以下兩點:

  1. **修改 /etc/fuse.conf**:
    打開該檔案,找到 #user_allow_other,將前面的 # 拿掉並存檔。這允許非 root 使用者使用 allow_other 參數。

  2. 確保 file_cache 權限
    BlobFuse2 需要在快取目錄寫入暫存檔。如果該目錄權限不足,掛載會失敗或運作異常。

    1
    sudo chmod 777 /mnt/blobfuse_cache

5. 如何設定開機自動掛載 (/etc/fstab)

若要開機自動掛載,請編輯 /etc/fstab 加入以下一行:

1
blobfuse2 /mnt/my_blob_container fuse3 defaults,_netdev,allow_other,--config-file=/path/to/blobfuse2-config.yaml 0 0

注意:請確保 config.yaml 的路徑是絕對路徑。

6. 卸載方式

如果不使用了,請使用標準的 Linux 卸載指令:

1
2
3
sudo umount /mnt/my_blob_container
# 或者 (如果卡住的話)
sudo umount -l /mnt/my_blob_container

digital ocean 設定密碼登入

因為ssh_config有Include /etc/ssh/ssh_config.d/*.conf,所以要修改/etc/ssh/sshd_config.d底下的檔案

Dell iDRAC 本機設定IP

先安裝racadm,在輸入service tag後的軟體下載頁面適用於 Microsoft Windows Server(R) 的 Dell EMC iDRAC 工具,v11.0.0.0
Dell-iDRACTools-Web-WINX64-11.3.0.0-609_A00

1
2
3
4
5
6
#查IP
racadm get iDRAC.IPv4
#設定IP
racadm set iDRAC.IPv4.Address 192.168.0.1
racadm set iDRAC.IPv4.Netmask 255.255.255.0
racadm set iDRAC.IPv4.Gateway 192.168.0.254

在作業系統打開iDrac網頁

  1. 下載對應型號的iDRAC Service Module for Windows
  2. 按iDRACSvcMod進行安裝
  3. 在開始用iDRAC UI Launcher打開網頁

https://www.dell.com/support/kbdoc/zh-tw/000194572/poweredge-%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%9D-ism-%E5%8F%8A%E5%95%9F%E5%8B%95-idrac-ui-%E5%95%9F%E5%8B%95%E5%99%A8

nvidia-tririon-inference-server-model-analyzer

環境

Ubuntu 22.04
trition inference server version : 23.08

在git clone下來的model_analyzer資料夾下啟動docker

1
2
3
4
5
docker run -it --gpus all \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd)/examples/quick-start:$(pwd)/examples/quick-start \
-v $(pwd)/examples/quick-start/output-model-repo:$(pwd)/examples/quick-start/output-model-repo \
--net=host nvcr.io/nvidia/tritonserver:23.08-py3-sdk

假設現在所在路徑$(pwd)是/home/user/model_inference

啟動docker後會發現quick-start所在的的路徑會跟host主機一模一樣,因此下面的指令可以直接用跟host一模一樣的路徑去執行

1
2
3
4
5
model-analyzer profile \
--model-repository /home/user/model_inference/model_analyzer/examples/quick-start \
--profile-models add_sub --triton-launch-mode=docker \
--output-model-repository-path /home/user/model_inference/model_analyzer/examples/quick-start/output-model-repo/add \
--export-path profile_results

查詢

https://github.com/triton-inference-server/model_analyzer/blob/5e3746f738b56118b31f28d9472db04f7361aaf8/docs/config_search.md#examples-of-additional-model-config-parameters

https://github.com/triton-inference-server/tutorials/blob/main/Conceptual_Guide/Part_4-inference_acceleration/README.md

onnx execution_accelerators?

參考:

https://github.com/triton-inference-server/model_analyzer/blob/4b45d2daeb9f574d13ae0e774677c87c04ef2124/docs/quick_start.md

rclone

安裝

依照官網下在binary檔進行安裝,apt下載的版本是比較舊的

設定

依照rclone config的指示進行設定

  1. 申請google OAuth client id,以便提高效能,使用 rclone config的時候會被詢問Option client_id.和Option client_secret.的時候可以填入

https://rclone.org/drive/#making-your-own-client-id

如果需要使用服務帳號

填入 JSON 金鑰檔案的完整路徑,例如:

1
/home/username/.config/rclone/service-account.json

或使用 ~ 代表家目錄:

1
~/rclone-service-account.json

jenhaoyang: 從哪裡取得service-account.json

GitHub Copilot: # 如何取得 Service Account JSON 金鑰檔案

Service Account JSON 金鑰檔案需要從 Google Cloud Platform (GCP) 建立和下載。以下是完整步驟:

建立service account步驟

rclone 在個人帳戶不要使用service account,因為沒辦法打開GSuite來設定權取Google drive API的權限

測試rclone連線

如果使用service account,必須把資料夾分享給service account的gmail帳號,因為他不能直接存取我們的google drive。另外也檢查的時候也必須要指定顯示與我們共用的資料夾,不然會看不到東西。

1
rclone ls google-remote: --drive-shared-with-me

https://ivonblog.com/posts/rclone-linux/

rclone mount

  1. 記得加上--daemon啟用背景執行
  2. --drive-shared-with-me也記得要加
    On Linux/macOS/FreeBSD start the mount like this, where /path/to/local/mount is an empty existing directory:
    1
    rclone mount remote:path/to/files /path/to/local/mount --drive-shared-with-me --daemon

rclone copy

rclone copy gdrive:backups/photos_backup /home/user/photos_restored

rclone copy 下載參數

核心參數建議

這是一個針對下載大量照片的 rclone copy 建議指令範本:

1
rclone copy --transfers=32 --checkers=64 --fast-list --progress remote:path/to/photos /local/path/to/photos

參數詳解與設定建議

  • --transfers=N

    • 作用:設定同時傳輸的檔案數量。這是提升大量小檔案下載速度最重要的參數。
    • 預設值:4
    • 建議設定:對於大量照片,您可以大幅提高此數值。建議從 1632 開始測試,如果您的網路頻寬和 CPU 效能允許,可以逐步增加,例如 64 或更高。需要注意的是,過高的數值可能會導致記憶體耗盡或被雲端服務商限速。
  • --checkers=N

    • 作用:設定並行檢查檔案的執行緒數量。在開始傳輸前,rclone 會檢查來源和目的地的檔案。增加此數值可以加快這個過程。
    • 預設值:8
    • 建議設定:此數值通常可以設定為 --transfers 的兩倍。例如,如果您設定 --transfers=32,可以將 --checkers 設定為 64。這有助於檢查程序快速完成,讓傳輸程序盡快開始。
  • --fast-list

    • 作用:這個參數會一次性列出遠端所有的檔案,而不是逐級遞迴掃描。對於包含大量檔案的目錄,這可以顯著減少列出檔案所需的時間。
    • 建議設定:在下載大量照片時,強烈建議啟用此參數。
  • --progress (-P)

    • 作用:顯示即時的傳輸進度,包括傳輸速度、預計剩餘時間和正在傳輸的檔案。這不會直接提升速度,但能幫助您監控傳輸狀況並判斷參數調整是否有效。

其他可選優化參數

  • --order-by string

    • 作用:控制檔案的傳輸順序。在某些情況下,混合傳輸大小檔案可能比隨機傳輸更有效率。
    • 建議設定:可以嘗試 --order-by "size,mixed,75",這會讓 rclone 優先處理 75% 的小檔案和 25% 的大檔案,有助於保持傳輸管道飽和。
  • --no-traverse

    • 作用:如果您只是要複製少量新檔案到一個已經很大的本地目錄,使用此參數可以避免掃描整個目標目錄,從而加快啟動速度。
    • 建議設定:僅適用於增量備份的場景。
  • --checksum (-c)

    • 作用:讓 rclone 不僅僅依賴檔案大小和修改時間,還會檢查檔案的校驗和 (checksum) 來判斷檔案是否相同。這會增加一些 CPU 負擔,但在確保資料完整性上更可靠。如果您的首要目標是速度,可以不加此參數。

如何找到最適合您的設定?

  1. 從建議值開始:使用 --transfers=32--checkers=64 作為起點。
  2. 監控效能:執行指令並加上 --progress 參數,觀察傳輸速度和穩定性。
  3. 逐步調整
    • 如果您的 CPU 使用率和網路頻寬都還很低,可以嘗試逐步增加 --transfers--checkers 的數值。
    • 如果開始出現大量錯誤訊息(例如 rateLimitExceededtimeout),或者速度不升反降,表示數值設定得太高,需要調降。

注意事項

  • 雲端服務商的限制:不同的雲端儲存(如 Google Drive, Dropbox, S3)對 API 的請求頻率有不同的限制。特別是 Google Drive,對於檔案的建立(這也間接影響下載)有每秒約 2-3 個檔案的限制。在這種情況下,即使瘋狂提高 --transfers 參數,速度也無法提升,甚至可能因觸發限制而變得更慢。
  • 硬體資源:較高的 --transfers--checkers 會消耗更多的記憶體和 CPU 資源。請確保您的電腦有足夠的資源來應付。
  • 打包檔案:如果照片檔案極小(例如都只有幾 KB),且數量極大(數十萬甚至百萬),最有效率的方式可能是在遠端將它們打包成一個大的壓縮檔(如 .zip 或 .tar),然後再下載這個單一的大檔案。 這可以完全繞過小檔案傳輸的延遲問題。

reclone設為service

啟動gui

rclone rcd –rc-web-gui –rc-web-gui-update –rc-no-auth

rclone的服務設定檔放在~/.config/systemd/user/底下

docker mount rclone資料夾

安裝fuse
sudo apt-get -y install fuse3
建立必要的資料夾

1
2
sudo mkdir -p /var/lib/docker-plugins/rclone/config
sudo mkdir -p /var/lib/docker-plugins/rclone/cache

安裝docker plugin

1
docker plugin install rclone/docker-volume-rclone:amd64 args="-v" --alias rclone --grant-all-permissions

必須先使用rclone config生出設定檔後,用rclone config file 找出rclone的設定檔位置,並且複製到/var/lib/docker-plugins/rclone/config

1
2
rclone config file
sudo cp ~/.config/rclone/rclone.conf /var/lib/docker-plugins/rclone/config

docker compose 範例,這裡以名稱為google-remote的relone 設定為例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: '3.8'

services:
myapp:
image: alpine
volumes:
- gdrive-volume:/data
command: ["sleep", "infinity"]

volumes:
gdrive-volume:
driver: rclone
driver_opts:
remote: "google-remote:"
allow_other: "true"
vfs-cache-mode: "full"
drive-shared-with-me: "true"

參考

https://rclone.org/commands/rclone_rcd/
https://gist.github.com/kabili207/2cd2d637e5c7617411a666d8d7e97101

fiftyone讀取dataset錯誤

  • 錯誤訊息
    1
    2
    {"t":{"$date":"2025-06-04T08:11:32.830Z"},"s":"I",  "c":"CONTROL",  "id":20697,   "ctx":"-","msg":"Renamed existing log file","attr":{"oldLogPath":"/home/iisi/.fiftyone/var/lib/mongo/log/mongo.log","newLogPath":"/home/iisi/.fiftyone/var/lib/mongo/log/mongo.log.2025-06-04T08-11-32"}}
    Subprocess ['/home/iisi/2005013/model_training/YOLO/venv/lib/python3.10/site-packages/fiftyone/db/bin/mongod', '--dbpath', '/home/iisi/.fiftyone/var/lib/mongo', '--logpath', '/home/iisi/.fiftyone/var/lib/mongo/log/mongo.log', '--port', '0', '--nounixsocket'] exited with error 100:

解法

https://docs.voxel51.com/user_guide/config.html#configuring-a-mongodb-connection

用自建的mongo db

You can achieve this by adding the following entry to your ~/.fiftyone/config.json file:
environment variable

1
export FIFTYONE_DATABASE_URI=mongodb://[username:password@]host[:port]

VSCode_CMake_GoogleTest

重點:

下面這兩行要放在最外面的 CMakeLists.txt 中,這樣才能在build資料夾啟動ctest

1
2
include(CTest)
enable_testing()

讓VSCode的Ctest可以下中斷點

參考:
https://stackoverflow.com/a/76447033/22299707

https://github.com/microsoft/vscode-cmake-tools/blob/defc0b5369c64467c3466b1cee3faba9f9633a6a/docs/debug-launch.md#debugging-tests

launch.json

1
2
3
4
5
6
7
8
9
{
"name": "(ctest) Launch",
"type": "cppdbg",
"cwd": "${cmake.testWorkingDirectory}",
"request": "launch",
"program": "${cmake.testProgram}",
"args": [ "${cmake.testArgs}" ],
// other options...
}

參考:
https://github.com/esweet431/box2d-lite/blob/vs-launch/CMakePresets.json