将本地LLM上传至私有JFrog huggingface-ml仓库时遭遇404错误,求助解决方法
看起来你已经顺利完成了模型的本地下载,但在上传到JFrog私有HF仓库时踩了一个常见的坑——这个404错误其实和validate-yaml没有直接关系,而是因为JFrog的Hugging Face兼容仓库有和原生HF Hub不一样的规则,再加上你的配置里还有几个需要调整的细节。我之前部署私有LLM仓库时也遇到过几乎一模一样的问题,下面给你一步步的解决思路:
问题根源分析
原生Hugging Face Hub支持上传时自动创建模型仓库,但JFrog的huggingface-ml仓库要求必须提前在Artifactory中预创建好对应的模型仓库路径,同时你的环境变量、上传脚本参数也要严格匹配JFrog的API规范,否则就会触发这种看似和yaml验证相关的404错误。
具体解决步骤
1. 先在JFrog中创建模型仓库结构
登录你的JFrog Artifactory UI,完成以下操作:
- 进入你已经创建好的
huggingface-ml类型私有仓库 - 在该仓库下创建对应的模型路径,比如可以和原HF仓库名保持一致(
unsloth/Phi-4-mini-instruct-GGUF),也可以用自己的命名空间(比如my-private-models/Phi-4-mini-instruct-GGUF) - 确保你的上传token拥有该路径的写入、创建权限
2. 修正HF_ENDPOINT的格式
你当前的HF_ENDPOINT大概率格式不对,正确的JFrog HF API端点应该是:
export HF_ENDPOINT="https://<MY_SERVER>/artifactory/api/huggingfaceml/<YOUR_JFROG_HF_REPO_NAME>"
注意:<YOUR_JFROG_HF_REPO_NAME>是你在JFrog中创建的huggingface-ml类型仓库的名称,不是模型的具体路径,别搞混了!
3. 调整上传脚本的关键参数
上传脚本里的repo_id不能直接用原Hugging Face的仓库ID,必须对应你在JFrog中创建的模型路径。另外建议先通过API确认模型仓库存在,修正后的脚本示例如下:
import os import requests from huggingface_hub import HfApi, create_repo from requests.exceptions import RequestException # 初始化API api = HfApi() # 替换为你的实际参数 local_model_path = "./phi3_mini_instruct" # JFrog仓库中的模型ID(对应你创建的路径) repo_id = "my-private-models/Phi-4-mini-instruct-GGUF" try: # 先尝试创建模型仓库(已存在则不会报错) print(f" 检查/创建模型仓库: {repo_id} ...") create_repo( repo_id=repo_id, repo_type="model", private=True ) print(f"✅ 模型仓库准备完成") # 上传本地模型文件 print(f" 开始上传模型到JFrog仓库 ...") api.upload_folder( folder_path=local_model_path, repo_id=repo_id, repo_type="model", allow_patterns="*", # 上传所有文件 overwrite=True # 覆盖已存在的文件(按需开启) ) print(f"✅ 模型上传完成!可以在JFrog UI中查看 {repo_id} 路径") except FileNotFoundError as e: print(f"❌ 本地模型路径不存在: {str(e)}") except requests.exceptions.JSONDecodeError as e: print("❌ JSON解析错误:JFrog API返回了非预期响应") print("请检查你的HF_ENDPOINT是否正确,以及token是否有足够权限") print(f"详细错误: {e}") except RequestException as e: print(f"❌ 请求错误: {e}") print("请排查:1. JFrog仓库路径是否存在 2. token权限是否足够 3. 网络是否连通") except Exception as e: print(f"❌ 意外错误: {e}")
4. 验证环境变量和权限
再次确认以下配置:
HF_TOKEN是JFrog生成的、拥有写入权限的API Token(不是原生Hugging Face的Token!)HF_ENDPOINT没有拼写错误,能正常访问- 你的服务器和JFrog实例之间没有防火墙或代理拦截
5. 额外排查手段
如果还是有问题,可以用curl直接测试JFrog的HF API,比如先创建仓库:
curl -X POST -H "Authorization: Bearer $HF_TOKEN" $HF_ENDPOINT/api/repos/model -d '{"name": "my-private-models/Phi-4-mini-instruct-GGUF", "private": true}'
同时可以查看JFrog的系统日志,确认404错误是路径不存在还是权限不足导致的。
备注:内容来源于stack exchange,提问作者V. Pravi

