摘要:最近看到K8s啟動stable-diffusion的文章,想著在自己開發環境復現一下,沒想到在內網環境還遇到這么多問題,記錄一下,
本文分享自華為云社區《內網Docker啟動Stable-Diffusion(AI作畫)》,作者:tsjsdbd ,
最近看到K8s啟動stable-diffusion的文章,想著在自己開發環境復現一下,沒想到在內網環境還遇到這么多問題,記錄一下,
1. 背景介紹
“AI作畫”就是你給一段文字,AI自動生成影像;或者你給一張影像,AI自動生成另一種風格(比如自拍照=>漫畫風),這個方向的AI框架以開源的stable-diffusion為代表,著名的Midjourney則是商業版的“AI作畫”,
2. 環境準備
由于“AI作畫”一般是GPU為主,雖然CPU也可以,但是速度相較GPU會慢很多(見下圖),所以這里我們準備一個帶GPU的Docker環境,
3. 下載鏡像
根據文章里面提到的gpu版鏡像地址(注:它這個鏡像其實來自于開源社區:stable-diffusion-webui),直接:
docker pull zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion:v1.gpu
這里要連外網+非官方倉庫,所以有2個配置需要為docker設定
- 為docker設定代理,
vi /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment="HTTPS_PROXY=http://ip:3128"
類似這樣,然后重啟docker
- 將目標倉庫地址設定為docker的信任倉庫,
vi /etc/docker/daemon.json "insecure-registries": ["zibai-registry.cn-hangzhou.cr.aliyuncs.com"],
類似這樣,
4. 啟動Docker容器
由于需要打開Web頁面,所以我們的docker需要設定埠映射,否則無法通過瀏覽器訪問,
所以docker啟動會帶2個額外的引數:(1)掛載GPU卡,(2)設定埠映射
docker run -it -p 80:7860 --gpus "device=1" zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion:v1.gpu /bin/bash
5. 啟動Stable-diffusion程式
在Docker容器中,按照啟動命令執行:
python3 launch.py --listen
但是會報錯:
這是因為這個鏡像會聯網下載“模型”,而我的容器無法聯網,所以這里在容器里面設定代理:
export proxy=http://10.155.96.xx:3128 export http_proxy=$proxy export https_proxy=${http_proxy}
類似這樣,但是還是下載失敗,報“證書不合法”
關于這個 “huggingface.co”證書不合法的問題,找了一圈解決方案,都無效,
比如,匯出證書,
然后拷貝到容器中,更新證書串列(2個證書都拷貝了,1個huggingface.co, 1個Huawei Web Secure):
update-ca-certificates
依然報證書不合法,
即使,我直接訪問 huggingface.co 是OK的
也搜了類似的問題:https://github.com/huggingface/hub-docs/issues/54,但是仍然不行,
Ps:這里證書問題不知道怎么解,有思路的同學,給點建議,
6. 修改代碼,忽略證書校驗
實在沒辦法,搜到的資料說可以在Python請求HTTP的函式里面關閉“證書校驗”,
于是找到錯誤呼叫堆疊
這個request發送的函式,有個“忽略證書校驗”的引數,
cat /stable-diffusion-webui/venv/lib/python3.8/site-packages/huggingface_hub/utils/_http.py
(ps:容器里面沒有vi命令,所以我是在主機上改的,因為任意容器里面的檔案,都可以在主機Host上看到)
于是我將其改為:
response = requests.request(method=method, url=url, **kwargs)
=》
response = requests.request(method=method, url=url, verify=False, **kwargs)
然后終于,可以順利下載“模型”了
模型下載完后,依然報了個錯:
什么? localhost 不能訪問,怎么可能~ 搜到一個類似的問題:https://github.com/microsoft/TaskMatrix/issues/250
說是代理原因,導致訪問本地失敗,
于是加上:
export no_proxy="localhost, 127.0.0.1, ::1"
報錯,看來 ipv6 這個格式不認識,
最終改為:
export no_proxy="localhost, 127.0.0.1"
一切OK,
7. 打開Stable-diffusion的WEB界面
瀏覽器輸入開發機的地址,即可打開Web界面(因為我們設定了 80 埠映射),
試了下效果,一般般,可能是我魔法咒語(Prompt)念的不太行,
(ps:有個“咒語”參考網站:https://civitai.com 從這里面下載的模型,生成效果不錯),
下載后,拷貝至對應目錄:
docker cp ./majicmixRealistic_v4.safetensors 容器id:/stable-diffusion-webui/models/Stable-diffusion/
然后Web界面選擇新下載的模型就行:
僅供參考~
參考:
《基于容器平臺 ACK 快速搭建 Stable Diffusion》
其中Docker鏡像對應dockerfile(萬一鏡像無法下載):
FROM nvidia/cuda:11.3.0-cudnn8-runtime-ubuntu20.04 ENV DEBIAN_FRONTEND noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ libgl1 libglib2.0-0 git wget python3 python3-venv && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* ADD . /stable-diffusion-webui WORKDIR /stable-diffusion-webui/ RUN ./webui.sh -f can_run_as_root --exit --skip-torch-cuda-test ENV VIRTUAL_ENV=/stable-diffusion-webui/venv ENV PATH="$VIRTUAL_ENV/bin:$PATH" VOLUME /stable-diffusion-webui/models VOLUME /root/.cache CMD ["python3", "launch.py", "--listen"]
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/552695.html
標籤:其他
下一篇:返回列表
