AI 绘画并不是一个离我们很远的话题,随着基于 diffusion 架构的 stable diffusion 的诞生,各式各样的绘图模型如井喷式诞生。如果想在本地跑 AIGC 的绘画软件,那么一块强大的 GPU 是必不可少的。但不是所有人都是臭打游戏的拥有一块 GPU,因此我在这里介绍如何白嫖腾讯云的免费 GPU 来运行 Stable Diffusion WebUI
感谢 Linux Do 上的网友将这个白嫖的方法分享出来
准备
首先打开 https://ide.cloud.tencent.com/dashboard/gpu-workspace ,登录后便能进入到这一个界面(图中是我已经创建好的,请忽略):
腾讯云在 Cloud Studio 中提供了一个月 10000 分钟的 GPU 时长(2025 年 1 月 1 日后),免费的 GPU 配置为 Tesla T4,拥有 16G 的显存。这用于跑 Stable Diffusion WebUI 已经绰绰有余了。 美中不足的是,这个在排除了系统自带占用后,只有 30G 的空间,稍微有点小
新建一个工作空间:
名称随便,能记住就行,模板选择 Pytorch:
进入新建好的工作空间 VScode 换皮
将左侧的示例删除:
新建一个终端:
安装 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 安装插件时走镜像加速安装
使用
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"
进入 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).
访问 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]/tcp
和7860/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 给大众使用,请不要滥用