如何加速向Google Cloud Storage传输大模型?遇重试超限报错求解决
解决Google Cloud Storage上传Hugging Face模型超时问题
针对你遇到的HTTPSConnectionPool(host='storage.googleapis.com', port=443): Max retries exceeded with url错误,以下是几个实用的解决方向:
1. 启用分块上传
Transformers模型体积通常较大,一次性上传容易触发超时。可以通过设置chunk_size启用分块上传,把大文件拆分成多个小部分传输:
import pickle from google.cloud import storage # 序列化模型 model_file = pickle.dumps(model) # 初始化bucket storage_client = storage.Client() bucket = storage_client.bucket("你的bucket名称") blob = bucket.blob(f"models/{user_id}.pickle") # 设置分块大小(比如10MB,可根据实际调整) blob.upload_from_string(model_file, chunk_size=10*1024*1024)
2. 自定义重试策略
默认的重试配置可能不足以应对网络波动,手动调整重试次数和退避规则:
from google.api_core.retry import Retry from google.cloud import storage # 自定义重试策略:最多重试5次,覆盖特定的HTTP错误码 retry_strategy = Retry( max_attempts=5, retryable_codes=[429, 500, 502, 503, 504], ) model_file = pickle.dumps(model) bucket = storage.Client().bucket("你的bucket名称") blob = bucket.blob(f"models/{user_id}.pickle") # 上传时应用重试策略 blob.upload_from_string(model_file, retry=retry_strategy)
3. 使用文件流替代内存字符串
直接处理大字符串可能占用过多内存,也会影响传输稳定性。可以先把pickle序列化到临时文件,再用文件流上传:
import pickle import tempfile from google.cloud import storage # 用临时文件存储序列化后的模型 with tempfile.NamedTemporaryFile(mode='wb', delete=False) as tmp: pickle.dump(model, tmp) # 上传文件流 bucket = storage.Client().bucket("你的bucket名称") blob = bucket.blob(f"models/{user_id}.pickle") with open(tmp.name, 'rb') as f: blob.upload_from_file(f)
4. 检查网络与环境配置
- 确认本地网络没有被防火墙、代理限制访问storage.googleapis.com
- 如果是在本地开发,尝试切换到稳定的网络(比如有线网络)
- 检查Google Cloud客户端版本是否过时,执行
pip install --upgrade google-cloud-storage更新到最新版
内容的提问来源于stack exchange,提问作者tidekis doritos
相关产品推荐
相关产品推荐

