[2023/12/30] 改推另一篇: 用亞馬遜的 ec2 雲端主機自架 stable diffusion
終於架好自己的 stable diffusion! 簡單筆記一下參考的連結。 因為我有 aws 的優惠, 所以基本上就照著這篇做: 用 AWS CloudFormation 架設 AUTOMATIC1111 版的 SD。 我這篇的篇名應該加上 「補遺」 才對, 因為重點根本都在 koding work 的文章裡面, 請大家自己去讀 :-)
準備 yaml 檔時, 因為我的帳號內已有自己常用的 ssh key 跟 SecurityGroup, 所以 "Resources" 那一章底下 (建立新的) EC2Key 跟 SecurityGroup 兩節直接省略。 然後 "EC2Instance" 那一節底下的 "Properties" 小節裡面的 KeyName 欄位直接填既有的 ssh key 名稱; SecurityGroups 欄位也是。
我喜歡在本機的 ~/.ssh/config 設定好一些參數, 這樣等一下建立 ssh tunnel 時, 命令列才不會太長:
Host sdlab User ubuntu # <== 其實我都會改 user, 當然 /etc/sudoers.d/90-cloud-init-users 也要跟著設定 HostName 99.99.99.99 Port 22 # <== 其實我都會改 ssh port, 當然 SecurityGroup 也要跟著設定 IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes
這樣就可以很簡單地 ssh sdlab
。
成功登入 ec2 之後, 先用 root 的身份
dpkg-reconfigure tzdata
改成台北時區、
稍微
強化一下 ssh 安全防護。
然後檢查一下 GPU 硬體是否存在 (Amazon 對我翻白眼):
lspci lshw -C display
不知道為什麼, 在我第一次開機時有看到 GPU; 第二次卻消失了。 總之如果沒有 nvidia-smi 指令可用, 就 手動安裝驅動程式:
add-apt-repository ppa:graphics-drivers/ppa apt search nvidia-driver | grep server # 我現在看到的最新版是 535; 請以你看到的最新版為主): apt install nvidia-driver-535-server python3-venv nvidia-smi
要執行 webui.sh 啟動服務之前, 需要知道幾件事/作一些準備:
- 必須 cd 進到它所在的目錄, 也就是從 github clone
回來的 stable-diffusion-webui 那個專案目錄,
這樣執行:
./webui.sh
。 如果是從其他目錄用絕對路徑的方式去執行它, 它會找不到專案內的其他檔案, 於是會在原來的 stable-diffusion-webui/ 底下再 clone 一份新的 stable-diffusion-webui/ , 後續新增的各種檔案就會跑這個第二層裡面,害我頭好昏。 - webui.sh 的完整命令列參數列表
- 想要分享給別的電腦使用, 需要用 --listen 或 --share 選項; 但如此一來, 未來在安裝套件時會遇到 extension access disabed 的錯誤, 所以不建議這麼用。 後來我都採用 ssh 正向隧道 或是 ssh 反向隧道。
- 到 模型簡介 的頁面挑幾個喜歡的模型, 開始下載, 放到 stable-diffusion-webui/models/Stable-diffusion/ 底下。
- 補安裝幾個套件:
apt install libgoogle-perftools4 libtcmalloc-minimal4
如果沒裝的話, 等一下可能會遇到 "Cannot locate TCMalloc" 的錯誤, 還是可以執行, 但會執行效率會較差。
然後從本地桌機 建立 ssh 正向隧道, 並且 透過隧道啟動 chromium:
ssh -4fND localhost:12074 sdlab chromium --proxy-server="socks5://localhost:12074" &
如果你在 sdlab 上啟動時有指定 port,
例如: cd ~/stable-diffusion-webui ; ./webui.sh --port 32158
那麼在 chromium 裡面就造訪這個網址: 0.0.0.0:32158
預設的 port 是 7860。
如果你的模型己經下載完、 放到正確位置,
就可以從網頁介面選一個模型、 開始玩囉!
如果有喜歡的圖片, 按下圖片下方存檔按鈕後,
咒語跟圖片會一起存放到 log/images/ 底下。
我另外還設定
用 systemd 開機時自動啟動。
又在 /etc/crontab 最後面加一句:
00 23 * * * root shutdown -h now
每天晚上 11 點自動關機, 以免忘記關機, 睡覺時還一直燒錢。
以後要玩的時候, 就這樣啟動:
aws ec2 start-instances --region ap-northeast-1 --instance-ids i-fffffffffffffffff
其中 instance id 是這樣查出來的:
aws ec2 describe-instance-status --region ap-northeast-1 --include-all-instances
每次玩完之後, 就 sudo shutdown -h now
。
接下來要讀 stable diffusion art 這個網站的文章, 學怎麼下咒語囉!
ps. 我也用 ~/.ssh/authorized_keys 把 ssh 帳號分享給我弟弟, 但後來才發現: 不能多人同時使用。
* * * * *
先前 成功測試 AMD 顯卡。 後來照著 SD on AMD GPU 做, 中間也解決了 No module named 'pytorch_lightning.utilities.distributed'、 AttributeError: config 等等問題, 但最後 SD (或是底下某個函式庫, 忘記了) 還是抓不到 GPU。 翻到某個 shell script 讀了一下, 覺得可能是我的顯卡太舊。 總之租用雲端的 GPU 省時又省錢, 未來 aws 有新的 GPU 時也可以重建 ec2 免費升級, 而且不論我在哪個城市都可以玩, 方便多了。
沒有留言:
張貼留言
因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。