我没在其他地方看到过类似的文档,我希望能运行两个实例,一个用于大型批处理作业,一个用于提示微调和模型训练。 仅供参考,这只适用于
Linux 系统,但它可能也适用于基于 Unix 的 MacOS 系统。 这不适用于尝试在单个 GPU 上运行多个实例的情况,这会导致对单个
GPU 的争用。 我将从已成功安装并运行 Automatic1111 的假设开始。

流程:

确定您已安装的 GPU 显卡的数量以及应该有多少显卡专用于运行实例。 在我的系统上,我有两张显卡,并计划同时使用它们。
根据显卡的类型,您可以使用显卡的实用程序来确定可用内容。 我的两张显卡都是 NVidia 显卡,所以我使用了 nvidia-smi。
需要注意的一点是,如果您有不同品牌的显卡,这将不起作用。
但是在这种情况下,您可以通过使用符号链接到单个模型、嵌入、模块等的存储库来减少磁盘使用量。 这与下面的符号链接创建过程类似。
这也适用于运行不同的前端,如 ComfyUI、Automatic1111 等。 它们也可以共享单个资源库。

我的显卡: GPU 0 GPU 1 请注意,GPU 编号从“0”开始,而不是从“1”开始

为了让事情更简单,我将根据它们的 GPU 编号将我的实例称为 0 和 1。 将 webui.sh 复制到 webui-0.sh,将
webui-user.sh 复制到 webui-user-0.sh。 在完成后续步骤之前,请不要制作额外的副本,以便更轻松。

cp webui.sh webui-0.sh
cp webui-user.sh webui-user-0.sh

现在编辑 webui-0.sh 并在文件中找到这一行:

if [[ -f "$SCRIPT_DIR"/webui-user.sh ]]
then
    source "$SCRIPT_DIR"/webui-user.sh
fi

将其更改为,然后保存您的文件

if [[ -f "$SCRIPT_DIR"/webui-user-0.sh ]]
then
    source "$SCRIPT_DIR"/webui-user-0.sh
fi

现在编辑 webui-user-0.sh 并找到以以下内容开头的行:

export COMMANDLINE_ARGS=

在此行之前立即添加此行:

export CUDA_VISIBLE_DEVICES=0

在行本身中可能已经存在各种选项,所以再添加两个。 请注意,我没有使用命令行选项来指定显卡。
经过一些研究,我了解到选项“--device-id”有时会导致内存溢出到另一张显卡。 选项端口是要侦听的端口,并且必须是唯一的且高于 1024。
选项 data-dir 指定实例应该在哪里查找资源。 但是,它不会更改输出目录,因此必须创建这些目录并更新配置文件。

--port=7860 --data-dir=./webui-0

这是我的一个 webui-user 文件的示例

export COMMANDLINE_ARGS="--xformers --no-half-vae --precision full --no-half --medvram --opt-split-attention --port=7860 --data-dir=./webui-0"

保存您的文件。

对于要启动的每个实例,复制 webui-0.sh webui-X.sh 和 webui-user-0.sh 到 webui-user-X.sh

cp webui-0.sh webui-1.sh
cp webui-user-0.sh webui-user-1.sh

修改新文件,将上面行中的“0”替换为新编号。 webui-1.sh:

if [[ -f "$SCRIPT_DIR"/webui-user-1.sh ]]
then
    source "$SCRIPT_DIR"/webui-user-1.sh
fi

webui-user-1.sh 将 GPU 编号从 0 更改为当前编号。

export CUDA_VISIBLE_DEVICES=1

更改 COMMANDLINE_ARGS 值,将 0 更改为显卡编号。

--port=7861 --data-dir=./webui-1

完成编辑后保存您的文件,并根据需要为其他显卡重复此操作。

在脚本所在的同一目录中,为每个实例创建一个新目录,其名称与上面 --data-dir 选项的名称相同。

mkdir webui-0 webui-1

现在我们需要复制一些文件和目录以维护单独的配置。 根据需要为每个正在创建的实例重复此操作。

cp -r cache.json config.json configs config_states params.txt ui-config.json webui-0
cp -r cache.json config.json configs config_states params.txt ui-config.json webui-1

更改为其中一个实例的目录。

cd webui-0

为了节省磁盘空间,创建指向可以共享的资源(如模型、嵌入、模块等)的符号链接。 由于各种原因,您可能不希望共享某些资源,因此从目录复制文件夹而不是创建符号链接。

ln -s ../embeddings embeddings
ln -s ../extensions extensions
ln -s ../localizations localizations
ln -s ../models models
ln -s ../modules modules
ln -s ../__pycache__ __pycache__
ln -s ../repositories repositories
ln -s ../scripts scripts
ln -s ../textual_inversion_templates textual_inversion_templates

现在创建用于存储图像的目录。 mkdir log mkdir outputs

还有最后一项更改要做,即在配置文件中设置输出目录。 如果您不习惯直接编辑此文件,您可以在“设置”中更新它,查找“用于保存的路径”并在其中进行更改,方法是添加如下所示的目录,因此将“webui-0/”添加到每个条目中,根据需要更改“0”。

编辑文件 config.json。 查找此部分:

"outdir_samples": "",
"outdir_txt2img_samples": "outputs/txt2img-images",
"outdir_img2img_samples": "outputs/img2img-images",
"outdir_extras_samples": "outputs/extras-images",
"outdir_grids": "",
"outdir_txt2img_grids": "outputs/txt2img-grids",
"outdir_img2img_grids": "outputs/img2img-grids",
"outdir_save": "log/images",
"outdir_init_images": "outputs/init-images",

并在字符串前面添加目录,因此“outputs/txt2img-images”变为“webui-0/outputs/txt2img-images”。

"outdir_samples": "",
"outdir_txt2img_samples": "webui-0/outputs/txt2img-images",
"outdir_img2img_samples": "webui-0/outputs/img2img-images",
"outdir_extras_samples": "webui-0/outputs/extras-images",
"outdir_grids": "",
"outdir_txt2img_grids": "webui-0/outputs/txt2img-grids",
"outdir_img2img_grids": "webui-0/outputs/img2img-grids",
"outdir_save": "webui-0/log/images",
"outdir_init_images": "webui-0/outputs/init-images",

此时,它应该准备好启动了。 因此,返回主目录并启动您的实例。

./webui-0.sh

确保一切似乎都正确启动。 在 Web 界面中,您需要通过单击其旁边的刷新按钮来刷新您的“稳定扩散检查点”下拉列表。
生成一个图像并确认它已保存到正确的目录。 要访问其他实例,请启动它们,并在 Web 浏览器中将端口更改为 webui-user-X.sh
文件中设置的相应编号。

示例: webui-0

https://127.0.0.1:7860/

webui-1

https://127.0.0.1:7861/

由于此更改是无损的,您可以通过调用原始脚本“webui.sh”来恢复到原始设置。 这可能都可以被某种程度地自动化,但这将是另一天的一个项目。 :-)


标签: none

添加新评论