AI 绘画并不是一个离我们很远的话题,随着基于 diffusion 架构的 stable diffusion 的诞生,各式各样的绘图模型如井喷式诞生。如果想在本地跑 AIGC 的绘画软件,那么一块强大的 GPU 是必不可少的。但不是所有人都是臭打游戏的拥有一块 GPU,因此我在这里介绍如何白嫖腾讯云的免费 GPU 来运行 Stable Diffusion WebUI

感谢 Linux Do 上的网友将这个白嫖的方法分享出来

准备

首先打开 https://ide.cloud.tencent.com/dashboard/gpu-workspace ,登录后便能进入到这一个界面(图中是我已经创建好的,请忽略): image.png

腾讯云在 Cloud Studio 中提供了一个月 10000 分钟的 GPU 时长(2025 年 1 月 1 日后),免费的 GPU 配置为 Tesla T4,拥有 16G 的显存。这用于跑 Stable Diffusion WebUI 已经绰绰有余了。 美中不足的是,这个在排除了系统自带占用后,只有 30G 的空间,稍微有点小

新建一个工作空间: image.png

名称随便,能记住就行,模板选择 Pytorch: image.png

进入新建好的工作空间 VScode 换皮 image.png

将左侧的示例删除: image.png

新建一个终端: image.png image.png

安装 WebUI

克隆项目(使用 Github Proxy 代理)到本地并进入 webui 文件夹:

git clone https://ghfast.top/https://github.com/lllyasviel/stable-diffusion-webui-forge.git
cd stable-diffusion-webui-forge

Github Proxy 项目的域名很容易被墙,请去项目最新发布地址查看可用域名,并将后续使用 Github Proxy 的域名替换

将自带的 pytorch 删除(版本太老了),创建 venv 并安装最新版的 pytorch:

pip uninstall torch torchvision torchaudio
python -m venv venv
source venv/bin/activate
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

可能会比较慢,但国内没有 pytorch 的镜像源了,只能这样嗯下

打开 stable-diffusion-webui-forge/modules/launch_utils.py 文件,将里面所有的 https://github.com 替换为 https://ghfast.top/https://github.com,在第一次启动 webui 安装插件时走镜像加速安装 image.png

使用 ctrl + H 进行替换

安装工作空间缺失的组件(aria2 是用于下载模型的,如果你喜欢使用 wget 的话就不用安装):

apt update && apt install aria2 google-perftools bc libgl1 -y

修改 stable-diffusion-webui-forge/webui-user.sh,取消 export COMMANDLINE_ARGS="" 这一行的注释,并修改为:

export COMMANDLINE_ARGS="--listen --enable-insecure-extension-access --api --theme dark --cuda-malloc"

image.png

进入 stable-diffusion-webui-forge/models/Stable-diffusion 下载模型:

对于画二次元图片,我推荐 Laxhar Dream Lab 训练的 NoobAI-XL 系列模型:Huggingface 地址Civitai 地址。我为这个模型做了一个画风查看网站,在此打个广告:NoobAI-XL V-Pred 1.0 Version 画风对比

cd stable-diffusion-webui-forge/models/Stable-diffusion
# 由于 HuggingFace 被墙,使用 HF-mirror 下载
aria2c -x 16 -o NoobAI-XL-Vpred-v1.0.safetensors "https://hf-mirror.com/Laxhar/noobai-XL-Vpred-1.0/resolve/main/NoobAI-XL-Vpred-v1.0.safetensors?download=true"
# HuggingFace 下载链接
# aria2c -x 16 -o NoobAI-XL-Vpred-v1.0.safetensors "https://huggingface.co/Laxhar/noobai-XL-Vpred-1.0/resolve/main/NoobAI-XL-Vpred-v1.0.safetensors?download=true"

返回 webui 根目录,并启动 webui:

cd /workspace/stable-diffusion-webui-forge/
./webui.sh -f

由于是 root 身份,需要添加 -f 参数才能启动 webui

终端出现类似以下输出时,webui 便启动成功了

Running on local URL:  http://0.0.0.0:7860

To create a public link, set `share=True` in `launch()`.
Startup time: 47.7s (prepare environment: 12.1s, launcher: 0.6s, import torch: 12.2s, initialize shared: 0.1s, other imports: 0.5s, load scripts: 2.2s, initialize google blockly: 14.1s, create ui: 2.6s, gradio launch: 1.4s, add APIs: 1.7s).

image.png

访问 WebUI

由于腾讯云的这个工作空间并不提供外部访问端口的功能,我们需要使用内网穿透工具来访问 webui。市面上有很多内网穿透服务,因此本章仅为抛砖引玉,不一定是最好的解决方案。

WebUI 自带的穿透

实际上,WebUI 自带了一个内网穿透功能。WebUI 是基于 Gradio 构建的,而 Guadio 提供了一个公共的穿透服务。只需要修改 stable-diffusion-webui-forge/webui-user.sh 这个文件,同样修改 export COMMANDLINE_ARGS= 这一行,添加 --share 参数即可使用。

这是最简单的方法,但有一个问题:Gradio 提供的服务器在海外,而由于腾讯云这个 ide 在大陆,内网穿透需要来回共两次,因此并不稳定

使用 FRP 穿透

FRP 应该是市面上最常见的内网传统工具了,可以选择市面上免费的 frps 服务商或者用自己的服务器搭建一个。

服务商

市面上也有很多服务商提供免费的 frps 服务,我在这里推荐几家我曾经用过的(没有 aff):

如何使用这些服务商请看其对应文档,本文只介绍如何使用自己的服务器搭建 FRP 来访问 WebUI

自己搭建

在搭建前,你需要拥有一个能从公网访问的服务器才能自建 frps(只需要两个端口,实际上提供 NATv4 入口的服务器也是可以的)

我们可以使用 docker compose 来一把梭配置文件:

services:
  frps:
    logging:
      options:
        max-size: 16m
    restart: unless-stopped
    network_mode: host # 直接使用 host 模式一把梭
    volumes:
      - './frps.toml:/etc/frp/frps.toml'
    container_name: frps
    image: snowdreamtech/frps

然后在同文件夹下编辑 frps.toml

bindPort = [FRP-port]
auth.token = "[FRP-token]"

请将 [FRP-port][FRP-token] 替换为实际使用的端口和 token

最后启动 docker 容器:

docker compose up -d

请注意开放服务器的防火墙端口,需要开放两个:[FRP-port]/tcp7860/tcp


回到腾讯云 IDE,让我们新建一个终端并创建一个文件夹来放 frpc 相关的文件:

cd /workspace/
mkdir frp
cd frp

使用 GitHub Proxy 从 FRP 仓库下载 amd64 架构的文件:

aria2c -x 16 -o frp_0.61.1_linux_amd64.tar.gz "https://ghfast.top/https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz"

解压文件:

tar -zxvf frp_0.61.1_linux_amd64.tar.gz

创建 frpc.toml 文件并编辑:

serverAddr = "[IP-or-domain]"
serverPort = [FRP-port]
auth.token = "[FRP-token]"

[[proxies]]
name = "Stable-Diffusion" # 你也可以取其他名字
type = "tcp"
localIP = "127.0.0.1"
localPort = 7860
remotePort = 7860

请将 [IP-or-domain][FRP-port][FRP-token] 替换为实际使用的服务器地址端口和 token

启动 frpc:

./frpc -c ./frpc.toml

正常启动后便可以访问 http://[IP-or-domain]:7860 来访问 WebUI 并正常的生成图片,所生成的图片会保存到 /workspace/stable-diffusion-webui-forge/outputs 文件夹下


现在如果我们想访问 WebUI,需要创建两个终端分别用于启动 WebUI 和 frpc。这样并不是很方便,我们可以写一个脚本来实现一键启动。

创建 run.sh

#!/bin/bash

# 定义一个函数来终止所有后台进程
cleanup() {
    echo "正在终止后台进程..."
    # 查找并终止所有以当前脚本启动的后台进程
    kill $FRP_PID
    exit 0
}

# 捕获 SIGINT 信号(Ctrl+C)并执行 cleanup 函数
trap cleanup SIGINT

# 启动 frpc 并将日志保存到 frp.log
nohup /workspace/frp/frpc -c /workspace/frp/frpc.toml > /workspace/frp.log 2>&1 &
FRP_PID=$!

# 启动 stable-diffusion-webui-forge
/workspace/stable-diffusion-webui-forge/webui.sh -f

保存并运行这个脚本,所有服务便会自动运行

尾巴

有几点需要注意:

  • 腾讯云每个月提供了 10000 分钟的免费时长,计费是从实例开机开始计算,请在使用完成后将其关机节省时长
  • 腾讯云免费提供了 GPU 给大众使用,请不要滥用