ubuntu服务器docker环境实现基于diffusers的stable diffusion部署

部分配置:

腾讯云环境,Ubuntu 20.04.5 LTS ,GPU:T4。

前置准备:

【创建docker环境】

这是运维同学帮忙搞的,这里就不细说了。

主要实现创建一个能够使用nvidia driver的docker,命名为chatgpt。装好GPU驱动,能够实现在docker内使用nvidia-smi命令查看GPU情况。这里是根据这篇文章操作的Docker容器如何优雅使用NVIDIA GPU-腾讯云开发者社区-腾讯云

题外话:这里docker container内部的CUDA version和外部机子上显示的不同。这里是11.4,外面只支持到11.0。保险起见都用cuda 10.2,保证稳定。

可能有帮助的命令:

-查看linux版本:cat /etc/os-release

step1. 找到对应cuda版本

历史cuda的release:CUDA Toolkit Archive | NVIDIA Developer

cuda 10.2:CUDA Toolkit 10.2 Download | NVIDIA Developer

-下载命令:


wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run

没有ubuntu20.04的对应版本没关系,直接楞搞18.04的就行。(向后兼容)下载之后,运行run文件。


sudo sh cuda_10.2.89_440.33.01_linux.run

执行遇到报错,缺少一个文件:


sh cuda_10.2.89_440.33.01_linux.run 
./cuda-installer: error while loading shared libraries: libxml2.so.2: cannot open shared object file: No such file or directory

直接安装就行: apt install libxml2

-参考:(120条消息) 安装cuda报错:./cuda-installer: error while loading shared libraries: libxml2.so.2_CrystalheartLi的博客-CSDN博客

-安装过程中会需要选 时区和城市 对应选择就可以。

完成后,再次运行run文件会报错:


 Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.

查找一下cuda10.2的要求:需要gcc7.3.0

看一下container里面的版本:


gcc -V

nice! 甚至没装!非常纯净(狗头)


apt install gcc-7  

再次启动run文件,还是报错

下载gcc-7.5 并且做软连接之后解决。

-参考:Ubuntu 20.04 安装 cuda10报错 Error: unsupported compiler: 9.4.0. Use --override to override this check. - luoganttcc - 博客园 (cnblogs.com)

驱动已经安装,把第一项取消选择之后install。

还是报错。

执行


 sh cuda_10.2.89_440.33.01_linux.run --silent --toolkit --samples --librarypath=/usr/local/cuda-10.2

后搞定。

step2. 安装anaconda

这部分教程太多了,也非常简单就不细讲了。

装完之后我们下一步创建虚拟环境

step3. 创建虚拟环境

python 版本限制3.10.9

step4. 尝试安装stable diffusion 需要的组件

stabilityai/stable-diffusion-2 · Hugging Face

pip install -i Simple Index transformers

以及其他几个包。这部分比较简单就不细讲了。

step5. 基于diffusers写一个基于fastapi的python脚本,直接nohup python启动就完事~

我这个目前已经写的很复杂了,集成了很多和其他系统的交互,就不贴源码了。贴一个GPT写的版本吧。大概展示个意思。

from fastapi import FastAPI, HTTPException
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
from PIL import Image
import io
import base64
import uvicorn

app = FastAPI()

model_id = "stabilityai/stable-diffusion-2"
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, torch_dtype=torch.float16)
pipe = pipe.to("cuda")

def generate_image(prompt):
    image = pipe(prompt).images[0]
    return image

def image_to_base64(image):
    buffered = io.BytesIO()
    image.save(buffered, format="PNG")
    return base64.b64encode(buffered.getvalue()).decode("utf-8")

@app.get("/generate_image/{prompt}")
def generate_image_api(prompt: str):
    try:
        generated_image = generate_image(prompt)
        base64_image = image_to_base64(generated_image)
        return {"base64_image": base64_image}
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Error generating image: {str(e)}")

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000, reload=True)

Good luck!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值