[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-princeton-nlp--LESS":3,"tool-princeton-nlp--LESS":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",151314,2,"2026-04-11T23:32:58",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":77,"owner_url":78,"languages":79,"stars":92,"forks":93,"last_commit_at":94,"license":95,"difficulty_score":96,"env_os":97,"env_gpu":98,"env_ram":97,"env_deps":99,"category_tags":106,"github_topics":107,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":115,"updated_at":116,"faqs":117,"releases":147},6729,"princeton-nlp\u002FLESS","LESS","[ICML 2024] LESS: Selecting Influential Data for Targeted Instruction Tuning","LESS 是一款专为大语言模型指令微调设计的数据选择工具，源自 ICML 2024 的研究成果。它的核心目标是帮助开发者从海量训练数据中精准筛选出对特定任务最具影响力的样本，从而用更少的数据实现更好的模型性能。\n\n在传统微调中，研究者往往需要消耗大量计算资源遍历全量数据，且难以确定哪些数据对提升特定能力最关键。LESS 通过构建“梯度数据存储库”，利用模型在预热训练阶段产生的梯度信息，量化每条训练数据对目标任务的贡献度。这种方法不仅显著降低了训练成本，还避免了无关数据带来的噪声干扰，让模型训练更加高效和针对性强。\n\n该工具特别适合 AI 研究人员和工程开发者使用，尤其是那些希望在有限算力下优化大模型特定能力（如逻辑推理、问答或代码生成）的团队。其独特的技术亮点在于将梯度分析与数据选择相结合，提供了一套完整的自动化流水线：从模型预热、梯度提取到任务导向的数据筛选及最终训练，全流程均有脚本支持。配合 Llama 2 等主流开源模型及 Flan、Dolly 等常用数据集，LESS 能让微调工作变得更加科学且可解释。","# LESS: Selecting Influential Data for Targeted Instruction Tuning\n\nThis repo contains the code for our ICML 2024  paper [LESS: Selecting Influential Data for Targeted Instruction Tuning](https:\u002F\u002Farxiv.org\u002Fabs\u002F2402.04333). In this work, we propose a data selection method to select influential data to induce a target capability.\n\n## 🔗 Quick Links\n- [LESS: Selecting Influential Data for Targeted Instruction Tuning](#less-selecting-influential-data-for-targeted-instruction-tuning)\n  - [🔗 Quick Links](#-quick-links)\n  - [Install Requirements](#install-requirements)\n  - [Data Preparation](#data-preparation)\n  - [Data Selection Pipeline](#data-selection-pipeline)\n    - [Step 1: Warmup training](#step-1-warmup-training)\n    - [Step 2: Building the gradient datastore](#step-2-building-the-gradient-datastore)\n    - [Step 3: Selecting data for a task](#step-3-selecting-data-for-a-task)\n    - [Step 4: Train with your selected data](#step-4-train-with-your-selected-data)\n  - [Evaluation](#evaluation)\n  - [Bugs or Questions?](#bugs-or-questions)\n  - [Citation](#citation)\n\n\n## Install Requirements\n**Step 1**: To get started with this repository, you'll need to follow these installation steps. Before proceeding, make sure you have [Pytorch](https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F) installed. \n```\npip3 install torch==2.1.2 torchvision torchaudio\n```\n\n**Step 2**: Then install the rest of the required packages:\n```\ncd LESS\npip install -r requirement.txt\n```\n\n**Step 3**: Finally, install the `less` package in editable mode to make it accessible for your development environment:\n```\npip install -e .\n```\n\n\n## Data Preparation\nWe follow the [open-instruct](https:\u002F\u002Fgithub.com\u002Fallenai\u002Fopen-instruct?tab=readme-ov-file#dataset-preparation) repo to prepare four instruction tuning datasets. In our project, we utilize a combination of four training datasets: Flan v2, COT, Dolly, and Open Assistant. For the purposes of evaluation, we employ three additional datasets: MMLU, Tydiqa, and BBH. A processed version of these files are available [here](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fprinceton-nlp\u002Fless_data).\n\n## Data Selection Pipeline\n\n### Step 1: Warmup training\nTo enhance downstream performance from data selection, it's crucial to start with a warmup training step. This involves selecting a small portion of your entire dataset to train using the LoRA method. Follow these steps for effective warmup training:\n\n```bash \nDATA_DIR=..\u002Fdata\nMODEL_PATH=meta-llama\u002FLlama-2-7b-hf\nPERCENTAGE=0.05 # percentage of the full data to train, you can specify the training file you want to use in the script\nDATA_SEED=3\nJOB_NAME=llama2-7b-p${PERCENTAGE}-lora-seed${DATA_SEED}\n\n.\u002Fless\u002Fscripts\u002Ftrain\u002Fwarmup_lora_train.sh \"$DATA_DIR\" \"$MODEL_PATH\" \"$PERCENTAGE\" \"$DATA_SEED\" \"$JOB_NAME\"\n```\n\n### Step 2: Building the gradient datastore\nOnce the initial warmup training stage is completed, we will collect gradients for the entire training dataset. For each checkpoint, our goal is to obtain the gradients of all the training data that we would like to select from. An example script is shown below.\n\n```bash\nCKPT=105\n\nTRAINING_DATA_NAME=dolly\nTRAINING_DATA_FILE=..\u002Fdata\u002Ftrain\u002Fprocessed\u002Fdolly\u002Fdolly_data.jsonl # when changing data name, change the data path accordingly\nGRADIENT_TYPE=\"adam\"\nMODEL_PATH=..\u002Fout\u002Fllama2-7b-p0.05-lora-seed3\u002Fcheckpoint-${CKPT}\nOUTPUT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F${TRAINING_DATA_NAME}-ckpt${CKPT}-${GRADIENT_TYPE}\nDIMS=\"8192\"\n\n.\u002Fless\u002Fscripts\u002Fget_info\u002Fget_train_lora_grads.sh \"$TRAINING_DATA_FILE\" \"$MODEL_PATH\" \"$OUTPUT_PATH\" \"$DIMS\" \"$GRADIENT_TYPE\"\n```\nIdeally, you would aim to create a datastore that encompasses a gradient of all the checkpoints and training data from which you wish to choose. \n\n### Step 3: Selecting data for a task\nTo select data for a particular downstream task, it's necessary to first prepare data specific to that task, using the same instruction-tuning prompt format as was employed during training. We have set up data loading modules for three evaluation datasets featured in our work: BBH, TydiQA, and MMLU. If you're interested in data selection for additional tasks, you can expand the [`less\u002Fdata_selection\u002Fget_validation_dataset.py`](less\u002Fdata_selection\u002Fget_validation_dataset.py) script to accommodate those tasks. Similar to obtaining gradients for training data, run the following script. The primary difference is that this process will yield SGD gradients for the validation data, following the formulation of the influence estimation. \n\n```bash\n\nCKPT=105\nTASK=tydiqa\nMODEL_PATH=..\u002Fout\u002Fllama2-7b-p0.05-lora-seed3\u002Fcheckpoint-${CKPT}\nOUTPUT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F${TASK}-ckpt${CKPT}-sgd # for validation data, we always use sgd\nDATA_DIR=..\u002Fdata\nDIMS=\"4096 8192\" # We use 8192 as our default projection dimension \n\n.\u002Fless\u002Fscripts\u002Fget_info\u002Fget_eval_lora_grads.sh \"$TASK\" \"$DATA_DIR\" \"$MODEL_PATH\" $OUTPUT_PATH \"$DIMS\"\n```\nYou should gain the gradients of the validation data for all the checkpoints you used for building the gradient datastore in the previous step. After obtaining the gradients for the validation data, we can then select data for the task. The following script will calculate the influence score for each training data point, and select the top-k data points with the highest influence score.\n\n```bash\nDIM=8192 # decide which dimension to use\nGRADIENT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F{}-ckpt{}-adam\u002Fdim${DIM}\nTRAIN_FILE_NAMES=\"flan_v2 cot dolly oasst1\"\nCKPTS=\"105 211 317 420\" # checkpoing index\nCHECKPOINT_WEIGHTS=\"1.6877e-05 1.2859e-05 7.7030e-06 2.5616e-06\" # average lr of the epoch\n\nVALIDATION_GRADIENT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F{}-ckpt{}-sgd\u002Fdim${DIM}\nTARGET_TASK_NAMES=\"tydiqa\"\nSELECTED_DATA_OUTPUT_PATH=\"..\u002Fselected_data\"\n\n.\u002Fless\u002Fscripts\u002Fdata_selection\u002Fmatching.sh \"$GRADIENT_PATH\" \"$TRAIN_FILE_NAMES\" \"$CKPTS\" \"$CHECKPOINT_WEIGHTS\" \"$VALIDATION_GRADIENT_PATH\" \"$TARGET_TASK_NAMES\" \"$SELECTED_DATA_OUTPUT_PATH\"\n```\n\nThe influence score for each training data point will be saved in the `OUTPUT_PATH` directory. You can use the following script to select the top-k data points with the highest influence score. \n\n```bash\npython3 -m less.data_selection.write_selected_data \\\n--target_task_names ${TARGET_TASK_NAMES} \\\n--train_file_names ${TRAIN_FILE_NAMES} \\\n--train_files ..\u002Fdata\u002Ftrain\u002Fprocessed\u002Fdolly\u002Fdolly_data.jsonl ..\u002Fdata\u002Ftrain\u002Fprocessed\u002Foasst1\u002Foasst1_data.jsonl \\\n--output_path $SELECTED_DATA_OUTPUT_PATH \\\n--percentage 0.05\n```\n\n### Step 4: Train with your selected data\nAfter selecting the data, you can use the following script to train the model with the selected data. \n\n```bash \nTARGET_TASK_NAME=\"tydiqa\"\nPERCENTAGE=0.05\nTRAIN_FILES=..\u002Fselected_data\u002F${TARGET_TASK_NAME}\u002Ftop_p${PERCENTAGE}.jsonl\nMODEL_PATH=meta-llama\u002FLlama-2-7b-hf\nJOB_NAME=llama2-7b-less-p${PERCENTAGE}-lora\n\n.\u002Fless\u002Fscripts\u002Ftrain\u002Flora_train.sh \"$TRAIN_FILES\" \"$MODEL_PATH\" \"$JOB_NAME\" \n```\nNote that you can also perform full-parameter finetuning by removing the lora training parameters. \n\n## Evaluation\nPlease follow the instructions in the [evaluation](evaluation\u002FREADME.md) folder to evaluate the performance of the model trained on the selected data.\n\n## Bugs or Questions?\nIf you have any questions related to the code or the paper, feel free to email Mengzhou (mengzhou@princeton.edu). If you encounter any problems when using the code, or want to report a bug, you can open an issue. Please try to specify the problem with details so we can help you better and quicker!\n\n## Citation\nPlease cite our paper if you find the repo helpful in your work:\n\n```bibtex\n@inproceedings{xia2024less,\n   title={{LESS}: Selecting Influential Data for Targeted Instruction Tuning},\n   author={Xia, Mengzhou and Malladi, Sadhika and Gururangan, Suchin and Arora, Sanjeev and Chen, Danqi},\n   booktitle={International Conference on Machine Learning (ICML)},\n   year={2024}\n}\n```\n\n\n\n\n","# LESS：为定向指令微调选择有影响力的数据\n\n本仓库包含我们ICML 2024论文[LESS：为定向指令微调选择有影响力的数据](https:\u002F\u002Farxiv.org\u002Fabs\u002F2402.04333)的代码。在该工作中，我们提出了一种数据选择方法，用于挑选能够诱导目标能力的有影响力的数据。\n\n## 🔗 快速链接\n- [LESS：为定向指令微调选择有影响力的数据](#less-为定向指令微调选择有影响力的数据)\n  - [🔗 快速链接](#-快速链接)\n  - [安装依赖](#安装依赖)\n  - [数据准备](#数据准备)\n  - [数据选择流程](#数据选择流程)\n    - [步骤1：预热训练](#步骤1-预热训练)\n    - [步骤2：构建梯度数据存储](#步骤2-构建梯度数据存储)\n    - [步骤3：为任务选择数据](#步骤3-为任务选择数据)\n    - [步骤4：使用所选数据进行训练](#步骤4-使用所选数据进行训练)\n  - [评估](#评估)\n  - [遇到问题或疑问？](#遇到问题或疑问)\n  - [引用](#引用)\n\n\n## 安装依赖\n**步骤1**：要开始使用本仓库，您需要按照以下安装步骤操作。在继续之前，请确保已安装[PyTorch](https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F)。\n```\npip3 install torch==2.1.2 torchvision torchaudio\n```\n\n**步骤2**：然后安装其余所需包：\n```\ncd LESS\npip install -r requirement.txt\n```\n\n**步骤3**：最后，以可编辑模式安装`less`包，使其对您的开发环境可用：\n```\npip install -e .\n```\n\n\n## 数据准备\n我们遵循[open-instruct](https:\u002F\u002Fgithub.com\u002Fallenai\u002Fopen-instruct?tab=readme-ov-file#dataset-preparation)仓库来准备四个指令微调数据集。在我们的项目中，我们使用了四种训练数据集的组合：Flan v2、COT、Dolly和Open Assistant。为了评估目的，我们还使用了另外三个数据集：MMLU、Tydiqa和BBH。这些文件的处理版本可在[Hugging Face](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fprinceton-nlp\u002Fless_data)上找到。\n\n## 数据选择流程\n\n### 步骤1：预热训练\n为了通过数据选择提升下游性能，从预热训练步骤开始至关重要。这涉及使用LoRA方法，从整个数据集中选取一小部分进行训练。请按照以下步骤进行有效的预热训练：\n\n```bash \nDATA_DIR=..\u002Fdata\nMODEL_PATH=meta-llama\u002FLlama-2-7b-hf\nPERCENTAGE=0.05 # 训练数据占全部数据的百分比，您可以在脚本中指定要使用的训练文件\nDATA_SEED=3\nJOB_NAME=llama2-7b-p${PERCENTAGE}-lora-seed${DATA_SEED}\n\n.\u002Fless\u002Fscripts\u002Ftrain\u002Fwarmup_lora_train.sh \"$DATA_DIR\" \"$MODEL_PATH\" \"$PERCENTAGE\" \"$DATA_SEED\" \"$JOB_NAME\"\n```\n\n### 步骤2：构建梯度数据存储\n完成初始预热训练阶段后，我们将收集整个训练数据集的梯度。对于每个检查点，我们的目标是获取所有希望从中选择的训练数据的梯度。下面是一个示例脚本。\n\n```bash\nCKPT=105\n\nTRAINING_DATA_NAME=dolly\nTRAINING_DATA_FILE=..\u002Fdata\u002Ftrain\u002Fprocessed\u002Fdolly\u002Fdolly_data.jsonl # 更改数据名称时，请相应地更改数据路径\nGRADIENT_TYPE=\"adam\"\nMODEL_PATH=..\u002Fout\u002Fllama2-7b-p0.05-lora-seed3\u002Fcheckpoint-${CKPT}\nOUTPUT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F${TRAINING_DATA_NAME}-ckpt${CKPT}-${GRADIENT_TYPE}\nDIMS=\"8192\"\n\n.\u002Fless\u002Fscripts\u002Fget_info\u002Fget_train_lora_grads.sh \"$TRAINING_DATA_FILE\" \"$MODEL_PATH\" \"$OUTPUT_PATH\" \"$DIMS\" \"$GRADIENT_TYPE\"\n```\n理想情况下，您应该创建一个包含所有检查点以及您希望从中选择的训练数据梯度的数据存储。\n\n### 步骤3：为任务选择数据\n要为特定的下游任务选择数据，首先需要准备该任务专用的数据，并采用与训练期间相同的指令微调提示格式。我们已经为我们工作中使用的三个评估数据集——BBH、TydiQA和MMLU——设置了数据加载模块。如果您对其他任务的数据选择感兴趣，可以扩展[`less\u002Fdata_selection\u002Fget_validation_dataset.py`](less\u002Fdata_selection\u002Fget_validation_dataset.py)脚本以适应这些任务。与获取训练数据梯度类似，运行以下脚本。主要区别在于，此过程将根据影响估计的公式，为验证数据生成SGD梯度。\n\n```bash\n\nCKPT=105\nTASK=tydiqa\nMODEL_PATH=..\u002Fout\u002Fllama2-7b-p0.05-lora-seed3\u002Fcheckpoint-${CKPT}\nOUTPUT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F${TASK}-ckpt${CKPT}-sgd # 对于验证数据，我们始终使用sgd\nDATA_DIR=..\u002Fdata\nDIMS=\"4096 8192\" # 我们默认使用8192作为投影维度 \n\n.\u002Fless\u002Fscripts\u002Fget_info\u002Fget_eval_lora_grads.sh \"$TASK\" \"$DATA_DIR\" \"$MODEL_PATH\" $OUTPUT_PATH \"$DIMS\"\n```\n您应获得在上一步中用于构建梯度数据存储的所有检查点的验证数据梯度。获取验证数据梯度后，即可为任务选择数据。以下脚本将计算每个训练数据点的影响得分，并选择影响得分最高的前k个数据点。\n\n```bash\nDIM=8192 # 决定使用哪个维度\nGRADIENT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F{}-ckpt{}-adam\u002Fdim${DIM}\nTRAIN_FILE_NAMES=\"flan_v2 cot dolly oasst1\"\nCKPTS=\"105 211 317 420\" # 检查点索引\nCHECKPOINT_WEIGHTS=\"1.6877e-05 1.2859e-05 7.7030e-06 2.5616e-06\" # 每个epoch的平均学习率\n\nVALIDATION_GRADIENT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F{}-ckpt{}-sgd\u002Fdim${DIM}\nTARGET_TASK_NAMES=\"tydiqa\"\nSELECTED_DATA_OUTPUT_PATH=\"..\u002Fselected_data\"\n\n.\u002Fless\u002Fscripts\u002Fdata_selection\u002Fmatching.sh \"$GRADIENT_PATH\" \"$TRAIN_FILE_NAMES\" \"$CKPTS\" \"$CHECKPOINT_WEIGHTS\" \"$VALIDATION_GRADIENT_PATH\" \"$TARGET_TASK_NAMES\" \"$SELECTED_DATA_OUTPUT_PATH\"\n```\n\n每个训练数据点的影响得分将保存在`OUTPUT_PATH`目录中。您可以使用以下脚本选择影响得分最高的前k个数据点。\n\n```bash\npython3 -m less.data_selection.write_selected_data \\\n--target_task_names ${TARGET_TASK_NAMES} \\\n--train_file_names ${TRAIN_FILE_NAMES} \\\n--train_files ..\u002Fdata\u002Ftrain\u002Fprocessed\u002Fdolly\u002Fdolly_data.jsonl ..\u002Fdata\u002Ftrain\u002Fprocessed\u002Foasst1\u002Foasst1_data.jsonl \\\n--output_path $SELECTED_DATA_OUTPUT_PATH \\\n--percentage 0.05\n```\n\n### 第4步：使用所选数据进行训练\n在选择好数据后，您可以使用以下脚本以所选数据训练模型。\n\n```bash \nTARGET_TASK_NAME=\"tydiqa\"\nPERCENTAGE=0.05\nTRAIN_FILES=..\u002Fselected_data\u002F${TARGET_TASK_NAME}\u002Ftop_p${PERCENTAGE}.jsonl\nMODEL_PATH=meta-llama\u002FLlama-2-7b-hf\nJOB_NAME=llama2-7b-less-p${PERCENTAGE}-lora\n\n.\u002Fless\u002Fscripts\u002Ftrain\u002Flora_train.sh \"$TRAIN_FILES\" \"$MODEL_PATH\" \"$JOB_NAME\" \n```\n请注意，您也可以通过移除LoRA微调的相关参数来执行全参数微调。\n\n## 评估\n请按照[evaluation](evaluation\u002FREADME.md)文件夹中的说明，对基于所选数据训练的模型性能进行评估。\n\n## 发现错误或有疑问？\n如果您对代码或论文有任何疑问，请随时发送邮件至Mengzhou（mengzhou@princeton.edu）。如果在使用代码时遇到任何问题，或希望报告错误，您可以提交一个问题。请尽量详细描述问题，以便我们能够更快更好地帮助您！\n\n## 引用\n如果您在工作中发现本仓库有所帮助，请引用我们的论文：\n\n```bibtex\n@inproceedings{xia2024less,\n   title={{LESS}: Selecting Influential Data for Targeted Instruction Tuning},\n   author={Xia, Mengzhou and Malladi, Sadhika and Gururangan, Suchin and Arora, Sanjeev and Chen, Danqi},\n   booktitle={International Conference on Machine Learning (ICML)},\n   year={2024}\n}\n```","# LESS 快速上手指南\n\nLESS (Selecting Influential Data for Targeted Instruction Tuning) 是一个用于筛选高影响力数据以进行定向指令微调的工具。通过该方法，您可以从海量数据中挑选出对特定任务提升最显著的数据子集，从而高效训练模型。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**: Linux (推荐 Ubuntu 18.04+)\n*   **Python**: 3.8 或更高版本\n*   **GPU**: 支持 CUDA 的 NVIDIA GPU (建议显存 24GB+ 以运行 Llama-2-7b 示例)\n*   **前置依赖**:\n    *   PyTorch (需预先安装，版本建议 2.1.2)\n    *   Git\n\n> **国内加速建议**：\n> 推荐使用清华或阿里镜像源加速 Python 包和 HuggingFace 模型的下载。\n> *   Pip 镜像：`-i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple`\n> *   HuggingFace 镜像：设置环境变量 `export HF_ENDPOINT=https:\u002F\u002Fhf-mirror.com`\n\n## 安装步骤\n\n请依次执行以下命令完成环境配置：\n\n**1. 安装 PyTorch**\n```bash\npip3 install torch==2.1.2 torchvision torchaudio --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu118\n# 若使用国内镜像，可替换为：\n# pip3 install torch==2.1.2 torchvision torchaudio -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n**2. 克隆仓库并安装依赖**\n```bash\ncd LESS\npip install -r requirement.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n**3. 安装 LESS 包**\n将包以可编辑模式安装，以便在开发环境中调用。\n```bash\npip install -e . -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n**4. 准备数据**\n本项目使用 Flan v2, COT, Dolly, Open Assistant 作为训练池，MMLU, Tydiqa, BBH 作为评估任务。您可以直接下载预处理好的数据：\n```bash\n# 需安装 huggingface-cli\nhuggingface-cli download princeton-nlp\u002Fless_data --local-dir ..\u002Fdata\n# 若下载缓慢，请确保已设置 export HF_ENDPOINT=https:\u002F\u002Fhf-mirror.com\n```\n\n## 基本使用\n\n以下流程演示如何针对 **TydiQA** 任务，从混合数据集中筛选出 5% 的高影响力数据并进行 LoRA 微调。\n\n### 第一步：热身训练 (Warmup Training)\n首先使用少量数据（如 5%）对基座模型进行 LoRA 热身训练，以获取初始梯度信息。\n\n```bash\nDATA_DIR=..\u002Fdata\nMODEL_PATH=meta-llama\u002FLlama-2-7b-hf\nPERCENTAGE=0.05\nDATA_SEED=3\nJOB_NAME=llama2-7b-p${PERCENTAGE}-lora-seed${DATA_SEED}\n\n.\u002Fless\u002Fscripts\u002Ftrain\u002Fwarmup_lora_train.sh \"$DATA_DIR\" \"$MODEL_PATH\" \"$PERCENTAGE\" \"$DATA_SEED\" \"$JOB_NAME\"\n```\n\n### 第二步：构建梯度数据存储 (Building Gradient Datastore)\n收集热身训练检查点（Checkpoint）上全量训练数据的梯度。假设使用第 105 步的检查点：\n\n```bash\nCKPT=105\nTRAINING_DATA_NAME=dolly\nTRAINING_DATA_FILE=..\u002Fdata\u002Ftrain\u002Fprocessed\u002Fdolly\u002Fdolly_data.jsonl\nGRADIENT_TYPE=\"adam\"\nMODEL_PATH=..\u002Fout\u002Fllama2-7b-p0.05-lora-seed3\u002Fcheckpoint-${CKPT}\nOUTPUT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F${TRAINING_DATA_NAME}-ckpt${CKPT}-${GRADIENT_TYPE}\nDIMS=\"8192\"\n\n.\u002Fless\u002Fscripts\u002Fget_info\u002Fget_train_lora_grads.sh \"$TRAINING_DATA_FILE\" \"$MODEL_PATH\" \"$OUTPUT_PATH\" \"$DIMS\" \"$GRADIENT_TYPE\"\n```\n*注：实际应用中需对所有训练文件（flan_v2, cot, dolly, oasst1）和关键检查点重复此步骤。*\n\n### 第三步：筛选目标数据 (Data Selection)\n计算验证集（目标任务）的梯度，并与训练数据梯度匹配，选出影响力得分最高的前 k 个样本。\n\n1. **获取验证集梯度**：\n```bash\nTASK=tydiqa\nMODEL_PATH=..\u002Fout\u002Fllama2-7b-p0.05-lora-seed3\u002Fcheckpoint-${CKPT}\nOUTPUT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F${TASK}-ckpt${CKPT}-sgd\nDATA_DIR=..\u002Fdata\nDIMS=\"4096 8192\"\n\n.\u002Fless\u002Fscripts\u002Fget_info\u002Fget_eval_lora_grads.sh \"$TASK\" \"$DATA_DIR\" \"$MODEL_PATH\" $OUTPUT_PATH \"$DIMS\"\n```\n\n2. **计算影响力并筛选**：\n```bash\nDIM=8192\nGRADIENT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F{}-ckpt{}-adam\u002Fdim${DIM}\nTRAIN_FILE_NAMES=\"flan_v2 cot dolly oasst1\"\nCKPTS=\"105 211 317 420\"\nCHECKPOINT_WEIGHTS=\"1.6877e-05 1.2859e-05 7.7030e-06 2.5616e-06\"\n\nVALIDATION_GRADIENT_PATH=..\u002Fgrads\u002Fllama2-7b-p0.05-lora-seed3\u002F{}-ckpt{}-sgd\u002Fdim${DIM}\nTARGET_TASK_NAMES=\"tydiqa\"\nSELECTED_DATA_OUTPUT_PATH=\"..\u002Fselected_data\"\n\n.\u002Fless\u002Fscripts\u002Fdata_selection\u002Fmatching.sh \"$GRADIENT_PATH\" \"$TRAIN_FILE_NAMES\" \"$CKPTS\" \"$CHECKPOINT_WEIGHTS\" \"$VALIDATION_GRADIENT_PATH\" \"$TARGET_TASK_NAMES\" \"$SELECTED_DATA_OUTPUT_PATH\"\n```\n\n3. **生成最终数据文件**：\n```bash\npython3 -m less.data_selection.write_selected_data \\\n--target_task_names ${TARGET_TASK_NAMES} \\\n--train_file_names ${TRAIN_FILE_NAMES} \\\n--train_files ..\u002Fdata\u002Ftrain\u002Fprocessed\u002Fdolly\u002Fdolly_data.jsonl ..\u002Fdata\u002Ftrain\u002Fprocessed\u002Foasst1\u002Foasst1_data.jsonl \\\n--output_path $SELECTED_DATA_OUTPUT_PATH \\\n--percentage 0.05\n```\n\n### 第四步：使用筛选数据训练 (Train with Selected Data)\n使用筛选出的数据对模型进行正式训练。\n\n```bash\nTARGET_TASK_NAME=\"tydiqa\"\nPERCENTAGE=0.05\nTRAIN_FILES=..\u002Fselected_data\u002F${TARGET_TASK_NAME}\u002Ftop_p${PERCENTAGE}.jsonl\nMODEL_PATH=meta-llama\u002FLlama-2-7b-hf\nJOB_NAME=llama2-7b-less-p${PERCENTAGE}-lora\n\n.\u002Fless\u002Fscripts\u002Ftrain\u002Flora_train.sh \"$TRAIN_FILES\" \"$MODEL_PATH\" \"$JOB_NAME\" \n```\n\n训练完成后，请参考 `evaluation\u002FREADME.md` 进行效果评估。","某医疗科技团队正试图将通用的 Llama-2-7B 大模型微调为专业的“临床问诊助手”，以提升其在复杂病例分析上的准确率。\n\n### 没有 LESS 时\n- **数据盲目堆砌**：团队不得不将 Flan v2、Dolly 等数百万条通用指令数据全部投入训练，其中大量日常对话数据与医疗场景无关，甚至引入噪声。\n- **算力成本高昂**：全量数据训练导致 GPU 运行时间长达数周，显存占用极高，严重挤占了其他实验项目的资源。\n- **效果提升瓶颈**：模型虽然学会了通用对话，但在关键的“鉴别诊断”和“用药建议”能力上提升微弱，出现“学了很多却用不上”的现象。\n- **试错周期漫长**：若需针对特定科室（如心血管）优化，只能重新全量训练或凭经验人工筛选数据，迭代效率极低。\n\n### 使用 LESS 后\n- **精准数据筛选**：LESS 通过计算梯度影响，自动从海量数据中识别出仅占 5% 但对“临床推理”最具影响力的核心样本，剔除无效数据。\n- **训练效率倍增**：仅使用筛选后的高质量子集进行 LoRA 微调，训练时间缩短至原来的几分之一，大幅降低算力开销。\n- **目标能力显著增强**：模型在 MMLU 医学板块和真实病例测试中的准确率显著提升，因为它“吃”进去的每一条数据都直接贡献于目标能力。\n- **灵活定向优化**：面对新的专科需求，只需运行 LESS 的选择管道即可快速生成新数据集，无需重复昂贵的全量梯度计算。\n\nLESS 的核心价值在于将大模型微调从“大力出奇迹”的数据堆砌模式，转变为“四两拨千斤”的精准数据导航模式。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fprinceton-nlp_LESS_8f43c0a2.png","princeton-nlp","Princeton Natural Language Processing","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fprinceton-nlp_9459cd72.png","",null,"http:\u002F\u002Fnlp.cs.princeton.edu","https:\u002F\u002Fgithub.com\u002Fprinceton-nlp",[80,84,88],{"name":81,"color":82,"percentage":83},"Jupyter Notebook","#DA5B0B",56.8,{"name":85,"color":86,"percentage":87},"Python","#3572A5",39.9,{"name":89,"color":90,"percentage":91},"Shell","#89e051",3.3,522,45,"2026-04-11T13:21:25","MIT",4,"未说明","必需 NVIDIA GPU (隐含，因涉及梯度计算和 LLM 训练)，具体型号和显存未说明 (需运行 Llama-2-7b 及 LoRA 微调)，CUDA 版本未说明",{"notes":100,"python":97,"dependencies":101},"1. 核心流程包括：预热训练 (LoRA)、构建梯度数据存储、为特定任务选择数据、使用选中数据训练。2. 基础模型示例使用 meta-llama\u002FLlama-2-7b-hf。3. 需要预先准备数据集 (Flan v2, COT, Dolly, Open Assistant 等)，可從 HuggingFace 下载处理后的版本。4. 安装时需先安装 PyTorch 2.1.2，再安装 requirements.txt 中的依赖，最后以可编辑模式安装 less 包。5. 评估阶段涉及 MMLU, Tydiqa, BBH 数据集。",[102,103,104,105],"torch==2.1.2","torchvision","torchaudio","less (本地包)",[14,16,35],[108,109,110,111,112,113,114],"data","data-selection","influence","instruction-tuning","llama","llm","mistral","2026-03-27T02:49:30.150509","2026-04-12T07:52:05.583163",[118,123,128,133,138,142],{"id":119,"question_zh":120,"answer_zh":121,"source_url":122},30363,"在步骤 3.1 中遇到显存不足（OOM）错误，即使使用 80GB A100 显卡也无法解决，该如何处理？","首先检查日志输出，确认是否成功导入了 `fast_jl`。如果日志打印了 \"Use basic projector\"，说明 `fast_jl` 未成功导入，导致使用了效率较低的基础投影方法从而引发 OOM。\n\n此外，生成评估梯度（eval_grads）时默认使用了 cuda:0，而模型和数据加载器可能已经占用了该显存。解决方案是在 `collect_grad_reps.py` 中将梯度计算移动到另一个可用的 GPU 设备上，或者尝试减少 `max_length` 参数（例如设为 128）作为临时规避方法。","https:\u002F\u002Fgithub.com\u002Fprinceton-nlp\u002FLESS\u002Fissues\u002F20",{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},30364,"如何在多卡环境中指定特定的 GPU（如 cuda:6）运行步骤 2，避免 \"Expected all tensors to be on the same device\" 错误？","不要直接在代码中硬编码设备索引，建议使用环境变量来指定可见设备。请尝试在运行命令前执行：\n`export CUDA_VISIBLE_DEVICES=6`\n\n如果问题仍然存在，可能是自动设备映射（auto device map）将模型部分放置到了其他显卡（如 cuda:1）。可以尝试在代码中固定设备映射为 `device_map = {'': 'cuda:0'}`（配合 CUDA_VISIBLE_DEVICES 使用，此时逻辑上的 0 号卡即物理上的 6 号卡）。","https:\u002F\u002Fgithub.com\u002Fprinceton-nlp\u002FLESS\u002Fissues\u002F19",{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},30365,"使用筛选后的数据继续训练模型时，出现嵌入层形状不匹配错误（如 [32001, 4096] vs [32000, 4096]），如何解决？","这通常是因为尝试用一个包含额外 token（通常是 padding token）的检查点去加载一个不包含该额外 token 的模型，或者反之。\n\n解决方法有两种：\n1. 在当前模型中添加对应的 padding token，使其词汇表大小与检查点一致。\n2. 避免在这种配置下继续训练，确保基座模型和微调检查点的词汇表结构完全匹配。","https:\u002F\u002Fgithub.com\u002Fprinceton-nlp\u002FLESS\u002Fissues\u002F15",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},30366,"运行步骤 2 构建梯度数据存储时，报错找不到 'optimizer.bin' 文件（实际只有 optimizer.pt），原因是什么？","这个问题通常与模型路径配置有关。请检查脚本 `.\u002Fless\u002Fscripts\u002Ftrain\u002Fwarmup_lora_train.sh` 中的逻辑。\n\n如果是 Llama-2-13b 模型，脚本中有特定判断：`if [[ $model_path == \"meta-llama\u002FLlama-2-13b-hf\" ]]`。请确保你的模型路径参数严格设置为 `meta-llama\u002FLlama-2-13b-hf`，以便触发正确的保存逻辑或加载逻辑，从而生成或识别正确的优化器文件。","https:\u002F\u002Fgithub.com\u002Fprinceton-nlp\u002FLESS\u002Fissues\u002F13",{"id":139,"question_zh":140,"answer_zh":141,"source_url":132},30367,"代码中存在一个小错误导致 sorted.csv 生成不正确，具体是哪一行需要修改？","在文件 `less\u002Fdata_selection\u002Fwrite_selected_data.py` 中，第 76 行和第 77 行的代码顺序有误，导致数据列表中的索引重复。\n\n解决方法：交换第 76 行和第 77 行的位置即可修复此问题，确保生成的 sorted.csv 文件正确无误。",{"id":143,"question_zh":144,"answer_zh":145,"source_url":146},30368,"运行步骤 3 的匹配脚本时遇到 'IsADirectoryError' 错误，提示路径是一个目录而不是文件，该如何修正？","该错误表明脚本试图加载一个目录，而实际上应该加载该目录下的具体文件。\n\n检查报错路径（例如 `...\u002Ftydiqa-ckpt422-sgd\u002Fdim8192`），该目录下通常包含 `all_orig.pt`, `all_unormalized.pt`, `grads-9.pt` 等文件。你需要确认脚本中 `torch.load` 加载的路径是否指向了具体的 `.pt` 文件（通常是包含梯度数据的文件），而不是父目录。可能需要修改调用脚本时的参数传递逻辑，确保传入的是文件路径而非文件夹路径。","https:\u002F\u002Fgithub.com\u002Fprinceton-nlp\u002FLESS\u002Fissues\u002F9",[]]