在手机termux的Ubuntu中推理img2img-turbo
搓面团法师
2026年01月27日 21:40

需要下载:

克隆项目代码,https://github.com/GaParmar/img2img-turbo

下载sd-turbo,

下载项目预训练模型:

www.cs.cmu.edu/~img2img-turbo/models

本文用到了:sketch to image stochastic lora.pkl

在手机termux的Ubuntu中创建conda环境:img2img-turbo

去掉requirements.txt中的xformer依赖项,手机推理基本用不到xformer。

xformers 是专注于 Transformer 模型加速与优化 的库,核心价值:

优化注意力机制(如 FlashAttention),减少显存占用、提升推理/训练速度;

提供高效的 Transformer 相关算子(如 RMSNorm、Swiglu),适配 PyTorch 生态;

常用在 Stable Diffusion、LLaMA 等大模型中,解决“显存不够用”“跑起来太慢”的问题。

修改src目录下的相关代码:

把pix2pix_turbo.py中需要从hf下载模型的代码改为使用本地目录路径,添加local_files_only=True,use_safetensors=True:

比如:self.tokenizer = AutoTokenizer.from_pretrained("./sd-turbo/tokenizer",local_files_only=True)

...

把其中的cuda替换为cpu:在nano中使用ctrl+\操作完成替换。

在mode.py中,修改代码,改为:noise_scheduler_1step = DDPMScheduler.from_pretrained("./sd-turbo/scheduler",local_files_only=True)

把inference_paired.py中的cuda替换为cpu。

此时,根据README.md的推理指令就可在命令行中进行推理。

在gradio6.0中,项目gradio代码无法运行。可以选择降低安装的gradio版本,具体版本根据目录中的yaml文件确定。

也可以结合inference_paired.py中的前向推理代码,和项目gradio_sketch2img.py中组件间的设计代码,使用gradio6.0的gr.Sketchpad(label="绘制区域")组件实现。图片绘制处理函数如下:

def process_drawing(data):

# 1. 防御性编程:处理 None

if data is None:

return None

# 2. 提取 numpy 数组,添加更多检查

if isinstance(data, dict) and "composite" in data:

numpy_image = data["composite"]

# 检查 numpy_image 是否为 None 或无效

if numpy_image is None:

return None

# 检查是否为 numpy 数组且非空

if not isinstance(numpy_image, np.ndarray) or numpy_image.size == 0:

return None

# 3. 转换为 PIL Image 并缩放至 512x512

try:

pil_image = Image.fromarray(numpy_image)

pil_image = pil_image.resize((512, 512), Image.Resampling.LANCZOS)

# 确保返回的 numpy_image 是有效的

return pil_image

except Exception as e:

print(f"转换图像时出错: {e}")

return None

else:

return None