背景介绍
腾讯云高性能应用服务 HAI 是为开发者量身打造的澎湃算力平台。无需复杂配置,便可享受即开即用的GPU云服务体验。在 HAI 中,根据应用智能匹配并推选出最适合的GPU算力资源,以确保您在数据科学、LLM、AI作画等高性能应用中获得最佳性价比。
趁着互动期间,我立马购置了一定时长的 腾讯云高性能应用服务 HAI,体验一下腾讯云 HAI 是如何快速构建 Stable Diffusion API。
购买服务
我们点击进入高性能应用服务 HAI 购买页面。
购买成功后自动会进行服务器创建
连接算力
在服务器创建好之后点击红框标识内容进入 web 网页。
其实我们只用到的 JupyterLab 的终端功能,选择使用终端命令行操作。
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 文字生图使用举例:
填写示例参数
{
"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 包,如果您还没有安装,请使用安装脚本:
pip install requests
接着我们新建一个 getpay.py 文件,运行代码,记得更改对应的端口 your_port 和请求地址 your_ip。
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 服务。