如何利用HAI轻松拿捏AI作画

腾讯云 高性能应用服务 HAI 应用部署,轻松拿捏基于 StableDiffusion 开源模型进行AI绘画

一、背景介绍:

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

HAI 服务优势

智能选型 :根据应用匹配推选GPU算力资源,实现最高性价比。同时,打通必备云服务组件,大幅简化云服务配置流程。

一键部署 :分钟级自动构建LLM、AI作画等应用环境。提供多种预装模型环境,包含如StableDiffusion、ChatGLM等热门模型。

可视化界面 :友好的图形界面,AI调试更为简单

场景介绍

基于HAI部署的StableDiffusionWebUI快速进行AI绘画

基于HAI部署的StableDiffusionAPI快速实现开发者所需的相关API服务

二、 实验介绍

本次我们使用 腾讯云高性能应用服务 HAI 体验快速搭建并使用AI模型 StableDiffusion ,实现思路如下:

1、体验 高性能应用服务HAI 一键部署 StableDiffusion AIGC

2、启动 StableDiffusionWebUI 进行文生图模型推理

3、开发者体验 JupyterLab 进行 StableDiffusion API 的部署

4、开发者使用 Cloud Studio 快速开发调用 StableDiffusion API 的前端Web页面

三、效果展示

文生图(text2img)

高性能应用服务 HAI 快速为开发者提供API调用服务(StableDiffusionAPI)

高性能应用服务HAI 搭建的 StableDiffusion API 作为服务端,Cloud Studio 助力快速开发一个简单的Web应用

四、实操指导

1、申请高性能应用服务 HAI

① . 点击链接进入 高性能应用服务 HAI 申请体验资格

② . 等待审核通过后,进入 高性能应用服务 HAI

③ . 点击前往体验HAI,登录 高性能应用服务 HAI 控制台

④ . 点击 新建 选择 AI模型,参照下图进行配置

⑤ . 等待创建完成

⑥ . 创建完成,查看相关状态

⑦ . 查看详细的配置信息

2、启动 高性能应用服务HAI 配置的 StableDiffusionWebUI 进行文生图模型推理

① .进入 StableDiffusionWebUI ,以下可选择两种方式进入

或者从服务器详情页进入

② .使用 高性能应用服务HAI 部署的 StableDiffusionWebUI 配置简体中文语言包

(1)进入 StableDiffusionWebUI

(2)此扩展可以在 Extension 选项卡里面通过加载官方插件列表直接安装

点击 Extension 选项卡,选择 Avaliable 子选项卡

取消勾选 localization ,再把其他勾上,然后点击 Load form,如下图,加载插件时,请耐心等待

(3)在输入框中查找插件关键字: zh_CN

(4)确认插件安装完成后,重启服务

(5)重启后,选择 SettingsUser Interface 选项,下拉选择语言 zh_CN ,点击 Apply settings 保存设置 ,并 Reload UI 重启服务。

(6)重启(Reload UI)后,重新认识界面。

③ .使用 高性能应用服务HAI 部署的 StableDiffusionWebUI 快速进行AI绘画

注意:提示词(Prompt)越多,AI 绘图结果会更加精准。另外,目前中文提示词的效果不好,还得使用英文提示词。

接下来我们使用 StableDiffusionWebUI 生成一张猫咪图片,配置以下参数后,点击 "生成" 即可

参数名 描述
提示词 主要描述图像,包括内容风格等信息,原始的webui会对这个地方有字数的限制,可以安装一些插件突破字数的限制 a pretty cat,cyberpunk art,kerem beyit,very cute robot zen,Playful,Independent,beeple
反向提示词 为了提供给模型,我们不需要的风格 (deformed,distorted,disfigured:1.0),poorly drawn,bad anatomy,wrong anatomy,extra limb,missing limb,floating limbs,(mutated hands and fingers:1.5),disconnected limbs,mutation,mutated,ugly,disgusting,blurry,amputation,flowers,human,man,woman
提示词相关性(CFG scale) 分类器自由引导尺度——图像与提示符的一致程度——越低的值产生的结果越有创意,数值越大成图越贴近描述文本。一般设置为7 7
采样方法(Sampling method) 采样模式,即扩散算法的去噪声采样模式会影响其效果,不同的采样模式的结果会有很大差异,一般是默认选择euler,具体效果我也在逐步尝试中。 Euler a
采样迭代步数(Sampling steps) 在使用扩散模型生成图片时所进行的迭代步骤。每经过一次迭代,AI就有更多的机会去比对prompt和当前结果,并作出相应的调整。需要注意的是,更高的迭代步数会消耗更多的计算时间和成本,但并不意味着一定会得到更好的结果。然而,如果迭代步数过少,一般不少于50,则图像质量肯定会下降 80
随机种子(Seed) 随机数种子,生成每张图片时的随机种子,这个种子是用来作为确定扩散初始状态的基础。不懂的话,用随机的即可 1791574510

配置并生成如下图:

3、 高性能应用服务HAI 快速为开发者提供 StableDiffusion API 服务

① .进入 jupyter_lab 操作界面

算力管理页面选择

初步认识并操作 jupyter_lab

选择使用 终端命令行 操作

输入代码:

cd /root/stable-diffusion-webui
python launch.py --nowebui --xformers --opt-split-attention  --listen --port 7862

命令参数描述:

命令 描述
--nowebui 以 API 模式启动
--xformers 使用xformers库。极大地改善了内存消耗和速度。
--opt-split-attention Cross attention layer optimization 优化显着减少了内存使用,几乎没有成本(一些报告改进了性能)。黑魔法。默认情况下torch.cuda,包括 NVidia 和 AMD 卡。
--listen 默认启动绑定的 ip 是 127.0.0.1,只能是你自己电脑可以访问 webui,如果你想让同个局域网的人都可以访问的话,可以配置该参数(会自动绑定 0.0.0.0 ip)。
--port 默认端口是 7860,如果想换个端口,可以配置该参数,例如:--port 7862
--gradio-auth username:password 如果你希望给 webui 设置登录密码,可以配置该参数,例如:--gradio-auth GitLqr:123456。

操作截图:

添加 高性能应用服务HAI 的端口配置,使外部网络能够顺利地访问该服务器提供的API服务

添加入站规则:

配置参考如下:

  来源:0.0.0.0/0 
  协议端口:TCP:7862 (根据您配置的端口填写)

② .启用 StableDiffusion API 接口使用指南

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

官方提供的api常用的有几个:

/sdapi/v1/txt2img 文字生图 POST
/sdapi/v1/img2img 图片生图 POST
/sdapi/v1/options 获取设置 GET | 更新设置 POST(可用来更新远端的模型)
/sdapi/v1/sd-models 获取所有的模型 GET

查看相关接口示例 ( /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" 
}

可复制以上参数到 Request body

名称 说明
prompt 提示词
negative_prompt 反向提示词
seed 种子,随机数
batch_size 每次张数
n_iter 生成批次
steps 生成步数
cfg_scale 关键词相关性
width 宽度
height 高度
restore_faces 脸部修复
tiling 可平铺
sampler_index 采样方法

请求API接口成功截图如下:

返回的格式如下:
{
   "images": [...],// 这里是一个base64格式的字符串数组,根据你请求的图片数量而定
   "parameters": {  ... },//此处为你输入的body 
   "info": "{...}"// 返回的图片的信息
}

当你看到这样的消息时,说明我们已经成功与远端的服务器进行连接!

如果你想验证结果的图片是怎么样的,你可以复制images中的其中一张图片的base64格式的字符串,到相关的网站下转换为jpg格式

③ .使用 python高性能应用服务HAI 提供的 StableDiffusion API 发送请求

以下演示使用 python 如何向 StableDiffusion API 发出请求。 我们希望向应用程序的 txt2img(即“文本到图像”)API 发送 POST 请求以简单地生成图像。

我们将使用 requests 包,所以如果你还没有安装它,请使用安装脚本:

pip install requests 

我们可以发送一个包含提示的请求作为一个简单的字符串。 服务器将返回一个图像作为 base64 编码的 PNG 文件,我们需要对其进行解码。 要解码 base64 图像,我们只需使用base64.b64decode(b64_image)。 以下使用python作为脚本代码测试:


import json
import base64
import requests

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

def submit_post(url: str,data: dict):
  """
  Submit a POST request to the given URL with the 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 output path.
  """
  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,very cute robot zen,Playful,Independent,beeple |',
     'negative_prompt':'(deformed,distorted,disfigured:1.0),poorly drawn,bad anatomy,wrong anatomy,extra limb,missing limb,floating limbs,(mutated hands and fingers:1.5),disconnected limbs,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')

请记住,你的结果会与我的不同。 如果遇到问题,请仔细检查运行 StableDiffusion API 应用程序的终端的输出。 可能是服务器尚未完成。 如果您遇到“404 Not Found”之类的问题,请仔细检查 URL 是否输入正确并指向正确的地址(例如 127.0.0.1)。

调用代码及图片生成截图:

服务端可查看每一次接口调用详情:

4、使用 高性能应用服务 HAI 搭建的 StableDiffusion API 作为服务端快速动手开发一个基于 Cloud Studio构建的Web应用

①. 点击链接进入 腾讯云 腾讯云链接 登录

②. 在搜索框输入 Cloud Studio ,点击搜索

③. 点击立即使用

④. 选择 开发空间 下的 手动创建 并 立即创建

⑤. 新建自定义模版配置如下:

⑥. 创建成功,并进入工作空间,1分钟内快速完成空间创建

空间(workspace)创建成功:

⑦. 为了您有更高效的产品体验,前端界面已完成,请下载压缩包后上传至工作空间并解压压缩包

点击下载压缩包 : sd_api.zip

上传压缩包示意图:

上传压缩包成功:

终端操作解压压缩包:

输入解压命令 :

unzip sd_api.zip

解压成功:

⑧. 开启web服务并查看需调试的页面

解压完成后,在终端窗口输入命令

cd sd_api  #进入文件夹
npm install #安装依赖包

等待依赖完成安装后就可以启动Web项目了,输入命令:

npm run dev #启动web

进入项目内(sd_api)并安装依赖后启动Web项目截图:

查看端口用于查看Web页面:

以下是选择两种查看页面方式的截图:

⑨. 快速开发核心功能

下面我们来开发项目的核心功能 :

在Vue项目下的 model 文件夹中创建一个名为 Txt2ImgModel.ts 的文件,这个文件主要用于调用相关接口参数配置

// 文生图api /sdapi/v1/txt2img 请求参数
export interface Txt2ImgReq {
    prompt: string,
    negative_prompt: string,
    width: number,
    height: number,
    steps: number,
    cfg_scale: number,
    sampler_name: string,
    batch_size: number,
    seed: number,
    save_images: boolean,
    alwayson_scripts: object | {}
}

// 文生图api /sdapi/v1/txt2img 响应结果
export interface Txt2ImgRes {
    images: [],
    parameters: string,
    info: string
}

// 采样方法api /sdapi/v1/samplers 响应结果
export interface Txt2ImgSamplers {
    name: string,
    aliases: string[],
    options: {}
}

// ControleNet 请求参数
export interface ControlNetReq {
    input_image: string,
    module: string,
    model: string,
    lowvram: boolean,
    pixel_perfect: boolean,
    weight: number,
    guidance_start: number,
    guidance_end: number,
    control_mode: number,
    resize_mode: number,
    processor_res: number,
    threshold_a: number,
    threshold_b: number
}


import { useStorage } from '@vueuse/core'

// 将所有组件的输入保存在浏览器的 localStorage 中,key为 txt2imgReqStorage
export const txt2imgReqStorage = useStorage<Txt2ImgReq>('txt2imgReq', {})

// 将文生图调用结果图片保存在浏览器的 localStorage 中,key为 txt2img_imgs
export const txt2imgResultStorage = useStorage<string[]>('txt2img_imgs', [])

创建 model 文件夹中 Txt2ImgModel.ts 的截图:

同样,在Vue项目下的 model 文件夹中创建一个名为 ControlNetModel.ts 的文件,这个文件主要用于添加 ControlNet 组件

// ControlNet的api /controlnet/module_list 的响应结果
export interface ControleNetModuleRes {
    module_list: []
}

// ControlNet的api /controlnet/model_list 的响应结果
export interface ControlNetModelRes {
    model_list: []
}

创建 model 文件夹中 ControlNetModel.ts 的截图

由于手动创建的环境中没有安装Vue插件,我们快速配置一个Vue的语言环境,等待安装完成

安装完成后,下载附件 main.zip 解压后将 main.vue 文件覆盖至您项目下的 views 文件夹中的 main.vue 并保存,这个文件将用于数据绑定、图片渲染功能:

下载代码文件:main.vue.zip

view文件夹中的main.vue文件修改后截图:

同时修改vue项目下的 vite.config 文件,配置信息修改为您部署在 高性能应用HAI服务器API 的相关信息:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  // 服务端代理
  server: {
    // 监听主机 127.0.0.1,如果是 0.0.0.0 则代表所有ip都可以访问该前端项目
    host: "127.0.0.1", //这里可不用管
    // 将 /sdapi、 /controlnet 开头的请求都代理到服务端地址 http://127.0.0.1:7862
    proxy: {
      '/sdapi': {
        target: 'http://your_ip:7862', //这里配置为您的服务端地址+端口
        changeOrigin: true
      },
      '/controlnet': {
        target: 'http://your_ip:7862', //这里配置为您的服务端地址+端口
        changeOrigin: true
      }
    }
  }
})

修改vite.config文件:

保存文件后Web服务将自动重启:

⑩ .搭建完成,快速启动Web页面并测试

重新加载Web页面,并在相对应的输入框中填写对应的参数:

参数名
提示词 a pretty cat,cyberpunk art,kerem beyit,very cute robot zen,Playful,Independent,beeple
反向提示词 (deformed,distorted,disfigured:1.0),poorly drawn,bad anatomy,wrong anatomy,extra limb,missing limb,floating limbs,(mutated hands and fingers:1.5),disconnected limbs,mutation,mutated,ugly,disgusting,blurry,amputation,flowers,human,man,woman
提示词相关性(CFG scale) 7
采样方法(Sampling method) Euler a
采样步数(Sampling steps) 50
随机种子(Seed) -1
每批次数量 3

前端页面展示效果-1(在浏览器中调试查看):

前端页面展示效果-2(在标签页中调试查看):

高性能服务HAI 预装的 JupyterLab 上查看接口被调用的信息:

五、清理资源

1、清理 Cloud Studio 中创建的工作空间

返回 Cloud Studio 的配置界面,选择开发空间,停止当前正在运行的空间后删除即可

2、销毁 高性能应用服务HAI 创建的 StableDiffusion 服务

进入算力管理页面,点击销毁,选择确认即可销毁

或者您可在产品的详情页面点击销毁即可

六、总结

本次实验主要是引导大家如何使用 高性能应用服务 HAI 部署 StableDiffusion 运行环境轻松拿捏AI作画,开箱即用,可以快速上手;同时,也使用了 Cloud Studio 快速开发并部署一个简单的应用程序。最后也欢迎大家一起探索 高性能应用服务 HAI 更多的功能,为工作中赋能增效降本!

七、活动介绍

活动一:完成实验后填写调查问卷,将会额外获得10积分奖励

问卷调查地址

活动二:使用腾讯云HAI云服务搭建Stable Diffusion模型,生成图片,提交给社群小助手,参与最终AIGC创作抽奖。

腾讯云 HAI 新品先锋体验官活动专题页地址

奖品:带有开发者提交的AIGC作品图片的定制手提电脑包。