引言:
从 Hugging Face 下载预训练模型(如 BLIP、Llama、Stable Diffusion 等)经常会遇到连接超时、下载中断、进度条卡死等问题。
配置镜像站不一定有效
遇到超时,第一时间查资料,提示使用国内镜像站(如 hf-mirror.com)。但实际操作中,也容易出错:
终端环境变量配置不生效
如果你使用的是 macOS 或Linux 系统,默认 Shell 是 zsh 而不是 bash时。很多教程让你把环境变量加到 ~/.bashrc,这在 zsh 下是无效的。
正确做法 是写入 ~/.zshrc:
zsh
echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.zshrc
source ~/.zshrc
Python 代码中 os.environ 的顺序错误
如果不想配置全局环境变量,很多人会在 Python 代码里临时设置:
python
import os
from transformers import BlipProcessor # ❌ 错误示范
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
致命错误 :transformers 库在被 import 的瞬间就会读取网络配置。如果你把 os.environ 写在 import 后面,镜像配置根本不会生效!
正确做法必须是:
python
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com' # ✅ 必须在 import 之前
from transformers import BlipProcessor
以上两种办法不一定有效,我试着使用替换环境变量:hf-mirror.com,一直未成功!
更好解决办法: ModelScope(魔搭社区)API替代
以我目前使用的的"BLIP 图像描述生成"项目为例,示范如何进行API替换。
1. 安装 ModelScope
首先,pip 安装 modelscope:
zsh
pip install modelscope
2. 代码改造(只需改一行)
改造前(使用 Transformers,容易超时):
python
import gradio as gr
# 痛点:这里极容易因为网络问题报错超时
from transformers import BlipProcessor, BlipForConditionalGeneration
processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")
# ... 后续代码
改造后(使用 ModelScope,国内满速下载):
python
import gradio as gr
# ✅ 终极解法:直接将 transformers 替换为 modelscope
from modelscope import BlipProcessor, BlipForConditionalGeneration
model_id = "Salesforce/blip-image-captioning-base"
processor = BlipProcessor.from_pretrained(model_id)
model = BlipForConditionalGeneration.from_pretrained(model_id)
# ... 后续代码完全不需要改动!
3. 测试代码如下
以下是替换后 Gradio 应用代码:
python
import gradio as gr
# 使用 modelscope 替代 transformers,享受国内高速网络
from modelscope import BlipProcessor, BlipForConditionalGeneration
print("正在从 ModelScope 高速加载 BLIP 模型...")
model_id = "Salesforce/blip-image-captioning-base"
processor = BlipProcessor.from_pretrained(model_id)
model = BlipForConditionalGeneration.from_pretrained(model_id)
print("✅ 模型加载成功!")
# 定义一个函数generate_caption,用于生成图像的标题
def generate_caption(image):
# Now directly using the PIL Image object
inputs = processor(images=image, return_tensors="pt")
outputs = model.generate(**inputs)
caption = processor.decode(outputs[0], skip_special_tokens=True)
return caption
# 定义一个函数caption_image,用于对图像进行标题生成
def caption_image(image):
"""
Takes a PIL Image input and returns a caption.
"""
try:
caption = generate_caption(image)
return caption
except Exception as e:
return f"An error occurred: {str(e)}"
iface = gr.Interface(
fn=caption_image,
inputs=gr.Image(type="pil"),
outputs="text",
title="Image Captioning with BLIP",
description="Upload an image to generate a caption."
)
iface.launch(server_name="127.0.0.1")