【腾讯云 HAI】快速构建 Stable Diffusion API 服务

背景介绍

腾讯云高性能应用服务 HAI 是为开发者量身打造的澎湃算力平台。无需复杂配置,便可享受即开即用的GPU云服务体验。在 HAI 中,根据应用智能匹配并推选出最适合的GPU算力资源,以确保您在数据科学、LLM、AI作画等高性能应用中获得最佳性价比。

趁着互动期间,我立马购置了一定时长的 腾讯云高性能应用服务 HAI,体验一下腾讯云 HAI 是如何快速构建 Stable Diffusion API。

购买服务

我们点击进入高性能应用服务 HAI 购买页面。

购买成功后自动会进行服务器创建

连接算力

在服务器创建好之后点击红框标识内容进入 web 网页。

其实我们只用到的 JupyterLab 的终端功能,选择使用终端命令行操作。

代码语言:sh
复制
cd stable-diffusion-webui
python launch.py --nowebui --xformers --opt-split-attention  --listen --port 7898

注意:如果 cd stable-diffusion-webui 失败,请观察当前所在目录是否正确。

命令参数描述如下图:

命令

描述

--nowebui

以 API 模式启动。

--xformers

改善内存消耗和速度。

--opt-split-attention

Cross attention layer optimization 优化显着减少了内存使用。

--listen

默认启动绑定的 IP 是 127.0.0.1。

--port

默认端口是7860,可以配置并修改该参数,例如:--port 7862。

--gradio-auth username:password

如果希望给 WebUI 设置登录密码,可以配置该参数,例如:--gradio-auth GitLqr:123456。

稍等片刻,等待服务启动。看到 INFO: Started server process 字眼表示服务已启动。

同时别忘了在安全组中添加高性能应用服务 HAI 对应端口配置,使外部网络能够顺利地访问该服务器提供的 API 服务。

访问服务

配置完成后,在浏览器地址栏输入服务器 IP 地址:端口号/docs 可查看相关的 API 接口使用指南。

我们以 /sdapi/v1/txt2img 文字生图使用举例:

填写示例参数

代码语言:json
复制
{
     "denoising_strength": 0,
     "prompt": "puppy dogs",
     "negative_prompt": "",
     "seed": -1,
     "batch_size": 2,
     "n_iter": 1,
     "steps": 50,
     "cfg_scale": 7,
     "width": 512,
     "height": 512,
     "restore_faces": false,
     "tiling": false,
     "sampler_index": "Euler" 
}

参数示意

名称

说明

prompt

提示词

negative_prompt

反向提示词

seed

种子,随机数

batch_size

每次张数

n_iter

生成批次

steps

生成步数

cfg_scale

关键词相关性

width

宽度

height

高度

restore_faces

脸部修复

tiling

可平铺

sampler_index

采样方法

点击执行,请求 API 接口成功截图如下:

当看到类似上图的消息时,说明已经成功与远端的服务器进行连接!如果希望验证结果的图片的实际展示效果,可以复制 images 中的其中一张图片的 base64 格式的字符串,到相关的网站下转换为 jpg 格式。

使用 Python 向高性能应用服务 HAI 提供的 Stable Diffusion API 发送请求

可以在已安装 python 和 环境的电脑上。我们还将使用 requests 包,如果您还没有安装,请使用安装脚本:

代码语言:python
代码运行次数:0
复制
Cloud Studio 代码运行
pip install requests 

接着我们新建一个 getpay.py 文件,运行代码,记得更改对应的端口 your_port 和请求地址 your_ip。

代码语言:python
代码运行次数:0
复制
Cloud Studio 代码运行
import json
import base64
import requests

your_ip = '134.175.64.13' # HAI服务器IP地址
your_port =7898 # SD api 监听的端口

def submit_post(url: str,data: dict):
"""
Submit a POST request to the given URL withthe given data.
"""
return requests.post(url,data=json.dumps(data))

def save_encoded_image(b64_image: str,output_path: str):
"""
Save the given image to the given outputpath.
"""
with open(output_path,"wb") as image_file:
image_file.write(base64.b64decode(b64_image))

if name == 'main':
#/sdapi/v1/txt2img
txt2img_url = f'http://{your_ip}:{your_port}/sdapi/v1/txt2img'
data = {
'prompt': 'a pretty cat,cyberpunk art,kerem beyit,verycute robot zen,Playful,Independent,beeple |',
'negative_prompt':'(deformed,distorted,disfigured:1.0),poorlydrawn,bad anatomy,wrong anatomy,extra limb,missing limb,floating limbs,(mutatedhands and fingers:1.5),disconnectedlimbs,mutation,mutated,ugly,disgusting,blurry,amputation,flowers,human,man,woman',
'Steps':50,
'Seed':1791574510
}
response = submit_post(txt2img_url,data)
save_encoded_image(response.json()['images'][0],'cat.png')

我们可以发送一个包含提示的请求作为一个简单的字符串。服务器将返回一个图像作为 base64 编码的 PNG 文件,我们会对其进行解码并存到脚本同级的 cat.png 文件中。

如果生成不满意可以多试几次。

写到最后

虽然我今天只是试用了冰山一角,但是 AI 绘画服务真的令人大开眼界。只需要准确描述,计算机就能生成你需要的图片。

再搭配腾讯云 HAI,可方便帮助用户快速搭建但不限于 Stable Diffusion API 服务。拿到 API 服务后开发者可根据需要开发自己的产品。

最后如果不用了,别忘了即时销毁 HAI 服务。