赞
踩
部分配置:
腾讯云环境,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
历史cuda的release:CUDA Toolkit Archive | NVIDIA Developer
cuda 10.2:CUDA Toolkit 10.2 Download | NVIDIA Developer
-下载命令:
<code class="language-plaintext hljs">wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
</code>
没有ubuntu20.04的对应版本没关系,直接楞搞18.04的就行。(向后兼容)下载之后,运行run文件。
<code class="language-plaintext hljs">sudo sh cuda_10.2.89_440.33.01_linux.run</code>
执行遇到报错,缺少一个文件:
<code class="language-plaintext hljs">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</code>
直接安装就行: apt install libxml2
-安装过程中会需要选 时区和城市 对应选择就可以。
完成后,再次运行run文件会报错:
<code class="language-plaintext hljs"> Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.</code>
查找一下cuda10.2的要求:需要gcc7.3.0
看一下container里面的版本:
<code class="language-plaintext hljs">gcc -V</code>
nice! 甚至没装!非常纯净(狗头)
<code class="language-plaintext hljs">apt install gcc-7 </code>
再次启动run文件,还是报错
下载gcc-7.5 并且做软连接之后解决。
驱动已经安装,把第一项取消选择之后install。
还是报错。
执行
<code class="language-plaintext hljs"> sh cuda_10.2.89_440.33.01_linux.run --silent --toolkit --samples --librarypath=/usr/local/cuda-10.2</code>
后搞定。
这部分教程太多了,也非常简单就不细讲了。
装完之后我们下一步创建虚拟环境
python 版本限制3.10.9
stabilityai/stable-diffusion-2 · Hugging Face
pip install -i Simple Index transformers
以及其他几个包。这部分比较简单就不细讲了。
我这个目前已经写的很复杂了,集成了很多和其他系统的交互,就不贴源码了。贴一个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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。