2025年7月14日 星期一

DGX 分散儲存系統筆記

以torch的DDP(distributed data parallel)作為基底考慮:
1. 進行torchrun的時候僅需指定master node IP
2. 掛載資料區時建議以rank0的機器做下載,其他機器都Share同一個資料夾,所以需要透過iSCSI或是NFS進行

目前資料讀取主流主要集中在RDMA協定,讓資料流盡量不要經過CPU,這狀況下:
  • iSCSI 使用 iSER達成
  • NFS使用NFSoRDMA
兩者的差別在於iSCSI是透過storage block進行掛載,所以沒有機會做出cache file system。但是NFS是以遠端檔案系統型式掛載之後做下載,因此有製作Cache file system的空間

建議作法
1. 遠端儲存系統開啟NFS service
2. DGX系統開始 cachefilesd 功能
3. DGX系統開啟NFS並與LDAP嫁接。透過cachefilesd把檔案先cache到本基端,在透過NFSoRDMA直接把資料灌到GPU當中

2025年6月16日 星期一

DGX H200 driver upgarde from 570 to 575 system hanged

 GPU driver 更新後,nvswich的driver也要更新到對應的位置。但不知道為什麼,設定檔也跟著跑掉,導致nvswith的設定位置不對。需要做幾個修正:

1. 修改startup的script吃config的位置。該config本來是設定為fork,但575好像改了設定,給予一個sleep,導致設定也要跟著修改為simple

2. 重新loading config


修改設定檔:

sudo systemctl edit --full nvidia-fabricmanager.service

以下為設定檔,原始的部分我用註解沒有更動:


====

[Unit]

Description=NVIDIA fabric manager service

After=network-online.target

Requires=network-online.target


[Service]

User=root

PrivateTmp=false

#Type=forking

Type=simple

TimeoutStartSec=720


Environment="FM_CONFIG_FILE=/usr/share/nvidia/nvswitch/fabricmanager.cfg"

Environment="FM_PID_FILE=/var/run/nvidia-fabricmanager/nv-fabricmanager.pid"

Environment="NVLSM_CONFIG_FILE=/usr/share/nvidia/nvlsm/nvlsm.conf"

Environment="NVLSM_PID_FILE=/var/run/nvidia-fabricmanager/nvlsm.pid"



PIDFile=/var/run/nvidia-fabricmanager/nv-fabricmanager.pid 


#ExecStart=/usr/bin/nvidia-fabricmanager-start.sh $FM_CONFIG_FILE $FM_PID_FILE $NVLSM_CONFIG_FILE $NVLSM_PID_FILE

ExecStart=/usr/bin/nvidia-fabricmanager-start.sh --fm-config-file /usr/share/nvidia/nvswitch/fabricmanager.cfg --fm-pid-file $FM_PID_FILE --nvlsm-config-file $NVLSM_CONFIG_FILE --nvlsm-pid-file $NVLSM_PID_FILE

ExecStop=/bin/sh -c '\

  sed -i "/^FM_SM_MGMT_PORT_GUID=0x[a-fA-F0-9]\\+$/d" "$FM_CONFIG_FILE"; \

  if [ -f "$NVLSM_CONFIG_FILE" ]; then \

    sed -i "/^guid 0x[a-fA-F0-9]\\+$/d" "$NVLSM_CONFIG_FILE"; \

  fi; \

  if [ -f "$FM_PID_FILE" ] && [ -s "$FM_PID_FILE" ]; then \

    kill "$(cat "$FM_PID_FILE")"; \

  fi; \

  if [ -f "$NVLSM_PID_FILE" ] && [ -s "$NVLSM_PID_FILE" ]; then \

    kill "$(cat "$NVLSM_PID_FILE")"; \

  fi'

LimitCORE=infinity


[Install]

WantedBy=multi-user.target


====


修改完畢後,要把設定檔重新loading:

sudo systemctl daemon-reload

sudo systemctl start nvidia-fabricmanager.service


最後看看有沒有出錯:

systemctl status nvidia-fabricmanager.service

journalctl -u nvidia-fabricmanager.service -b -n 50 --no-pager



2025年5月2日 星期五

iscsi 連線問題筆記

如果要進行umount但是出現target buzy

sudo fuser -km 掛載點

sudo umount 掛載點


iSCSI重啟

sudo open-iscsi restart 

掛載lun

iscsiadm -m discovery -t sendtargets -p 目標IP

iscsiadm -m node -p 目標IP --login

如果出現類似以下訊息表示成功掛載:

Logging in to [iface: default, target: iqn.2000-01.com.synology:XXXXXXXXXXX.Target-1.05350d6cc87, portal: 192.168.72.19,3260]

Login to [iface: default, target: iqn.2000-01.com.synology:XXXXXXXXXXX.Target-1.05350d6cc87, portal: 192.168.72.19,3260] successful.

可以用fdisk -l看看,不過經驗上是能夠辨識出是哪一顆,只能透過容量大小推測。如果同時掛很多台容量一樣的就麻煩了。


其他指令

sudo iscsiadm -m session #查詢目前連線的lun

sudo mount -a #連線之後,讓系統透過/etc/fstab重新進行掛載


refs:

https://osiutino.wordpress.com/2013/11/10/iscsi-%E8%A8%AD%E5%AE%9A%E7%AD%86%E8%A8%98-2-ubuntu-%E4%B8%8A%E4%BD%BF%E7%94%A8-initiator-%E9%80%A3%E6%8E%A5-iscsi-target/

2025年3月10日 星期一

DGX H200 在cuda container中出現cuInit error

 通常出現cuda initial error就只要把driver更新就可以了。但是DGX 系列在後續為了加強節點與節點之間的傳輸速度,出廠就直接安裝了NV-Switch。

之前不知道發生甚麼問題,一直出現cuIntial error,查了很久才發現是因為NV-switch功能被disable。因此只要下達以下指令就可以了


執行前主要先確定gpu的driver跟nvswitch有沒有相符,這直接看錯誤訊息就好:

sudo systemctl status nvidia-fabricmanager

這邊可能會出現底下類似錯誤:

× nvidia-fabricmanager.service - NVIDIA fabric manager service

     Loaded: loaded (/etc/systemd/system/nvidia-fabricmanager.service; enabled; vendor preset: enabled)

     Active: failed (Result: exit-code) since Sun 2025-06-15 22:57:30 PDT; 19min ago

        CPU: 93ms


Jun 15 22:57:30 DGX-H200 systemd[1]: Starting NVIDIA fabric manager service...

Jun 15 22:57:30 DGX-H200 nvidia-fabricmanager-start.sh[16241]: Detected Pre-NVL5 system

Jun 15 22:57:30 DGX-H200 nv-fabricmanager[16258]: fabric manager NVIDIA GPU driver interface version 570.133.20 don't match with driver version 575.57.08. Please update with ma>

Jun 15 22:57:30 DGX-H200 nvidia-fabricmanager-start.sh[16258]: fabric manager NVIDIA GPU driver interface version 570.133.20 don't match with driver version 575.57.08. Please u>

Jun 15 22:57:30 DGX-H200 nvidia-fabricmanager-start.sh[16241]: "/usr/bin/nv-fabricmanager" failed! Exit code: 1

直接可以看到是因為GPU driver是575,但是nvswitch的driver還在570。這邊就需要重新安裝一下(記得自己修改版號)

sudo apt-get install nvidia-fabricmanager-575


接下來就是把預設的fabricmanager打開:

sudo systemctl start nvidia-fabricmanager  #把nv-switch打開

sudo systemctl enable nvidia-fabricmanager  #開機階段就預設打開


Ref:

https://docs.nvidia.com/datacenter/tesla/pdf/fabric-manager-user-guide.pdf

2025年1月2日 星期四

在github的repo中使用hugging face dataset repo做dataset 管理

 dataset的版本使用lfs進行版本管理是比較方便的方式,但是github的lfs空間只有給1G,如果有不同的資料版本出現,很快github的lfs空間就滿了。

這邊要進行在github的repo中(當然也能置換成其他的git repo,例如gitea或是gitlab),把git lfs的位置轉換到hugging face dataset repo上,進行異地管理。

首先要確定:

1. 已經安裝好git
2. 已經安裝好git lfs
3. 把hugging face dataset 以及github repo都開好了

Process

Step1. Clone git repo

git clone git@github.com:markliou/xxx.git


Step 2. 在該repo底下創建資料夾(這邊範例名稱是cosmic_v101),並且把檔案放進去

mkdir cosmic_v101


Step 3. 設定LFS的位置,這邊假設是指定到 markliou/COSMIC_v101

git config -f .lfsconfig lfs.url git@hf.co:datasets/markliou/COSMIC_v101

確定看看設定狀況

git lfs env
Endpoint=https://hf.co/datasets/markliou/COSMIC_v101 (auth=none)
  SSH=git@hf.co:datasets/markliou/COSMIC_v101



Step 4. 設定lfs tracking

git lfs track 'cosmic_v101/*' 


Step 5. 將檔案還有.lfsconfig和.gitattributes推上去

git add .
git commit -m "xx"
git push

可以使用 git lfs ls-files看看資料夾裡面的檔案有沒有被追蹤到


Step 6. 檢查檔案有沒有上到hugging face。

首先到hugging face網頁上,找到setting的選項。這邊的舉例就是到 https://huggingface.co/datasets/markliou/COSMIC_v101/settings




接下來會看到 "List FPS files",點進去就應該可以看到檔案的hash。



後續只要對github的repo進行clone,就能把檔案一併抓下來。



Ref:

https://help.sonatype.com/en/git-lfs-repositories.html

https://github.com/git-lfs/git-lfs/wiki/Tutorial

https://huggingface.co/docs/hub/datasets-adding

https://huggingface.co/docs/hub/repositories-getting-started

2024年12月13日 星期五

DGX 燒機測試

 使用nvsm就能把cpu跟gpu、記憶體吃滿


sudo nvsm stress-test 172800 # 持續172800秒的壓力測試,即48小時。預設會把cpu、gpu、記憶體全吃滿

sudo nvsm stress-test gpu 172800 #持續48小時壓力測試,且只有測試gpu


2024年9月15日 星期日

SSL certificate problem: unable to get local issuer certificate

使用git的時候會出現的狀況。不過狀況還是可以區分出兩種情境:

  1. 該網站雖然使用https協定,但是憑證不合法(可能過期或是只有使用IP沒過DNS)
  2. 該網頁使用https協定,且使用瀏覽器開啟都合法,使用git卻不合法
情境2是因為ssl申請完畢後,需要有一個放到store的程序。git安裝時其實會去掃store,所以把原本的git移除以後重新安裝大概可以處理掉(網頁很多就直接教學說升級git,反正都要移除重裝了,不如就順便升級)。另外一種做法就是設定git的認證方式。windows上有schannel可以用(ubuntu目前還沒找到辦法,就只能自己手動輸入到store或是直接不認證)

git config --global http.sslBackend schannel


情境1的狀況,因為是本身的ssl認證狀態就是問題,所以最好就是從git的認證直接關掉:


git config --global http.sslVerify false


ref:

https://komodor.com/learn/how-to-fix-ssl-certificate-problem-unable-to-get-local-issuer-certificate-git-error/

https://forum.gitea.com/t/fatal-unable-to-access-ssl-certificate-problem-unable-to-get-local-issuer-certificate/1434

https://github.com/go-gitea/gitea/issues/8063

https://wiki.gentoo.org/wiki/Certificates

https://blog.csdn.net/sinat_24899403/article/details/114967572

DGX 分散儲存系統筆記

以torch的DDP(distributed data parallel)作為基底考慮: 1. 進行torchrun的時候僅需指定master node IP 2. 掛載資料區時建議以rank0的機器做下載,其他機器都Share同一個資料夾,所以需要透過iSCSI或是NFS進行 ...