emotion / src /upload_to_hf.py
robot4's picture
Upload folder using huggingface_hub
af9853e verified
import os
import sys
import glob
import shutil
from huggingface_hub import HfApi, create_repo, upload_folder
from config import Config
def main():
print("🚀 开始全量上传 (All-in-One) 到 robot4/sentiment-analysis-bert-finetuned ...")
api = HfApi()
try:
user_info = api.whoami()
username = user_info['name']
print(f"✅ User: {username}")
except:
print("❌ Please login first.")
return
# 目标仓库 (用户指定)
target_repo_id = "robot4/sentiment-analysis-bert-finetuned"
# 1. 准备临时上传目录
upload_dir = "hf_upload_staging"
if os.path.exists(upload_dir):
shutil.rmtree(upload_dir)
os.makedirs(upload_dir)
print(f"📦 正在打包所有文件到 {upload_dir}...")
# A. 复制项目代码和资源
# 包含了 data, src, docs, notebooks, demo, results/images 等
items_to_copy = [
"src", "notebooks", "docs", "demo", "data",
"README.md", "requirements.txt", "*.pptx"
]
for pattern in items_to_copy:
for item in glob.glob(pattern):
dest = os.path.join(upload_dir, item)
print(f" - Adding {item}...")
if os.path.isdir(item):
shutil.copytree(item, dest, dirs_exist_ok=True)
else:
shutil.copy2(item, dest)
# B. 特殊处理 results 目录 (只传图片和 logs,不传所有 checkpoint 文件夹)
results_dest = os.path.join(upload_dir, "results")
os.makedirs(results_dest, exist_ok=True)
# 复制图片
if os.path.exists("results/images"):
shutil.copytree("results/images", os.path.join(results_dest, "images"), dirs_exist_ok=True)
# 复制 txt metrics
for txt in glob.glob("results/*.txt"):
shutil.copy2(txt, results_dest)
# C. 提取最新模型权重到根目录 (方便直接加载)
candidates = glob.glob(os.path.join(Config.RESULTS_DIR, "checkpoint-*"))
candidates = [c for c in candidates if os.path.isdir(c)]
if candidates:
candidates.sort(key=os.path.getmtime)
latest_ckpt = candidates[-1]
print(f"✅ 提取最新模型权重: {latest_ckpt} -> 根目录")
model_files = ["config.json", "model.safetensors", "pytorch_model.bin", "tokenizer.json", "vocab.txt", "tokenizer_config.json", "special_tokens_map.json"]
for fname in os.listdir(latest_ckpt):
if fname in model_files or fname.endswith(".safetensors") or fname.endswith(".bin"):
shutil.copy2(os.path.join(latest_ckpt, fname), os.path.join(upload_dir, fname))
else:
print("⚠️ 未找到 Checkpoint,仅上传代码和数据。")
# 2. 执行上传
print(f"\n⬆️ 正在上传所有文件到 https://huggingface.co/{target_repo_id}")
create_repo(repo_id=target_repo_id, repo_type="model", exist_ok=True)
upload_folder(
folder_path=upload_dir,
repo_id=target_repo_id,
repo_type="model"
)
# Cleanup
shutil.rmtree(upload_dir)
print("🎉 上传完毕!")
if __name__ == "__main__":
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
sys.path.append(parent_dir)
main()