我没在其他地方看到过类似的文档,我希望能运行两个实例,一个用于大型批处理作业,一个用于提示微调和模型训练。 仅供参考,这只适用于
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”来恢复到原始设置。 这可能都可以被某种程度地自动化,但这将是另一天的一个项目。 :-)