在 AI 模型微调或构建 RAG(检索增强生成)应用时,我们通常会在腾讯云等云端服务器上配置 Jupyter Notebook 环境进行数据处理。最近在跑一个微调脚本时,遇到了两个典型的工程问题:一是通过 huggingface_hub 批量下载几百 GB 的海外开源数据集时,进度条经常卡死;二是用 OpenAI 接口批量生成 Embedding 向量时,频繁触发速率限制。
本地电脑上测试同样的脚本一切正常,但在服务器上却屡屡碰壁。本文记录这次从应用层排查到网络层的解决过程。
现象 1:Hugging Face 数据集下载中断 使用 datasets 库拉取数据时,经常跑了几分钟就报 ConnectionResetError,或者下载速度从几十兆断崖式下跌到几十 KB/s。
现象 2:Embedding 接口频繁 429 在并发调用 text-embedding-3-small 接口处理文本时,即便调低了 asyncio 的并发量,依然大面积报 429 Too Many Requests。
既然代码逻辑没变,差异只在于运行环境。第一步,检查云服务器的基础网络环境。
# 检查服务器的公网出口 IP 属性
curl -s https://ipinfo.io/json | jq '.org, .asn'结果显示,当前服务器的 IP 归属为 Tencent Cloud(数据中心 IP 段)。
原理解析:
要绕过 CDN 的限速和 API 网关的 IP 连坐,最有效的方法是将请求的网络出口从“云服务器机房 IP”切换到干净的“住宅网络 IP”。
对于需要长时间运行的训练任务和数据拉取,建议配置长效静态住宅 IP,保证下载过程中 IP 不跳变,避免任务中断。
以下是结合 1024Proxy 网络出口的代码实践:
1. 环境变量注入网络出口
在启动 Jupyter Notebook 或执行 Python 脚本前,通过环境变量指定网络代理,这样底层库(如 requests, httpx, aiohttp)会自动接管流量。
# ============================================
# 配置底层网络出口(以长效静态住宅 IP 为例)
# 服务商:1024Proxy
# 官网:https://1024proxy.com/?kwd=hyj-txy
# ============================================
export HTTP_PROXY="http://用户名:密码@gateway.1024proxy.com:端口"
export HTTPS_PROXY="http://用户名:密码@gateway.1024proxy.com:端口"2. Python 代码层面的显式配置(针对局部请求)
如果不想全局代理,可以在代码中单独为 Hugging Face 下载和 Embedding 请求配置代理:
import os
from datasets import load_dataset
from openai import OpenAI
import httpx
# 假设已在环境变量中配置,或者在代码中指定
PROXY_URL = "http://用户名:密码@gateway.1024proxy.com:端口"
# 1. 下载数据集 (HuggingFace)
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" # 可选:配合国内镜像
# 如果底层走 requests,环境变量生效;如果走 hf_transfer,需在系统层配置
dataset = load_dataset("locuslab/TOFU", split="train")
# 2. 调用 Embedding 接口
# 注意:OpenAI SDK 原生依赖 httpx,需自定义 http_client 注入代理
http_client = httpx.Client(proxies=PROXY_URL)
client = OpenAI(
api_key="your-api-key",
http_client=http_client
)
def get_embedding(text):
try:
# 通过干净的住宅 IP 发起请求,降低被风控概率
response = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
return response.data[0].embedding
except Exception as e:
print(f"Embedding failed: {e}")
return None
# 运行测试
vector = get_embedding("机器学习模型微调的数据准备阶段。")
print(f"Vector dimension: {len(vector) if vector else 0}")切换网络出口后:
429 报错完全消失,响应时间稳定在 300ms 左右。在云端进行 AI 开发时,除了关注算力(GPU)和代码逻辑,网络出口的 IP 属性同样是一个核心变量。将默认的机房 IP 替换为纯净的住宅 IP,往往能解决那些看似莫名其妙的大文件下载中断和 API 频控问题。
注:本文为技术开发经验分享。具体网络配置请结合自身业务需求进行测试,并确保数据采集与 API 调用行为符合各平台的服务条款及相关法律法规。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。