要让Linux系统更好地支持中文字符处理,您可以安装以下软件包:
bash展开代码sudo apt-get update sudo apt-get install -y locales fonts-noto-cjk language-pack-zh-hans
然后配置系统的语言环境:
bash展开代码sudo locale-gen zh_CN.UTF-8 sudo update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8
对于Python程序处理中文文件名的问题,您可以确保系统环境变量设置正确:
bash展开代码export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
您也可以使用locale
命令检查当前系统的语言环境设置:
bash展开代码locale
LLaMA Factory 官方文档在 data/README.md
中明确声明:
Currently we support datasets in alpaca and sharegpt format. Allowed file types include json, jsonl, csv, parquet, arrow.
这表明 JSONL 格式是 LLaMA Factory 原生支持的文件格式之一。
在 src/llamafactory/extras/constants.py
中,LLaMA Factory 定义了完整的文件类型映射:
python展开代码FILEEXT2TYPE = {
"arrow": "arrow",
"csv": "csv",
"json": "json",
"jsonl": "json", # JSONL 被映射为 "json" 类型
"parquet": "parquet",
"txt": "text",
}
这个映射确保了 .jsonl
文件能够被正确识别和处理。
Read file: src/llamafactory/data/converter.py Read file: src/llamafactory/data/parser.py
从 src/llamafactory/data/parser.py
第 47-53 行可以看出,LLaMA Factory 使用字段名映射而不是位置:
python展开代码# sharegpt tags
role_tag: Optional[str] = "from" # 默认映射 "from" 字段
content_tag: Optional[str] = "value" # 默认映射 "value" 字段
user_tag: Optional[str] = "human" # 默认映射 "human" 值
assistant_tag: Optional[str] = "gpt" # 默认映射 "gpt" 值
VLLM 处理多模态请求的核心流程在 BaseMultiModalProcessor.apply()
方法中(第 1810-1870 行):
python展开代码def apply(
self,
prompt: Union[str, list[int]],
mm_data: MultiModalDataDict,
hf_processor_mm_kwargs: Mapping[str, object],
tokenization_kwargs: Optional[Mapping[str, object]] = None,
return_mm_hashes: bool = False,
) -> MultiModalInputs:
"""
处理多模态输入的主要步骤:
1. 对提示文本和多模态数据一起应用 HF Processor
2. 在 token IDs 中查找并更新序列,用占位符 token 替换
3. 从处理后的 token IDs 中提取占位符 token 的信息
"""
是的,图片通过编码器编码为 token 后,插入的位置就是 <image>
标记的位置。
占位符替换:在 Qwen2VLPlugin.process_messages
中(第 1630-1640 行):
python展开代码while IMAGE_PLACEHOLDER in content:
image_seqlen = image_grid_thw[num_image_tokens].prod() // merge_length if self.expand_mm_tokens else 1
content = content.replace(
IMAGE_PLACEHOLDER, f"<|vision_start|>{self.image_token * image_seqlen}<|vision_end|>", 1
)
num_image_tokens += 1
Token 替换:在 Qwen2VLProcessor.__call__
中(第 150-170 行):
python展开代码while self.image_token in text[i]:
num_image_tokens = image_grid_thw[index].prod() // merge_length
text[i] = text[i].replace(self.image_token, "<|placeholder|>" * num_image_tokens, 1)
index += 1
text[i] = text[i].replace("<|placeholder|>", self.image_token)
你提供的数据格式:
json展开代码{
"image": "000443568.jpg",
"width": 700,
"height": 700,
"conversations": [
{
"from": "human",
"value": "Write a detailed description of this image..."
},
{
"from": "gpt",
"value": "The image is of a pair of silver earrings..."
}
]
}
问题分析:
<image>
标记:在 conversations
中没有 <image>
占位符image
字段是单个字符串,但需要与对话中的 <image>
标记对应width
和 height
字段在 LLaMA-Factory 中不会被使用在 tmux 中,默认的鼠标滚轮行为是进入 复制模式(copy-mode) 来查看历史输出(终端日志)。如果你希望 鼠标滚轮向上 直接滚动查看之前的终端日志(而不是触发其他操作),可以这样优化配置:
~/.tmux.conf
(如果不存在就新建)bash展开代码nano ~/.tmux.conf # 或者用 vim
sh展开代码# 启用鼠标支持(包括滚轮、窗格选择)
set -g mouse on
# 鼠标滚轮向上:进入复制模式并向上滚动(查看历史日志)
bind -n WheelUpPane {
if -F "#{pane_in_mode}" {
send-keys -M # 如果已在复制模式,继续滚动
} {
copy-mode -e # 进入复制模式
send-keys -M # 模拟向上滚动
}
}
# 鼠标滚轮向下:退出复制模式或向下滚动
bind -n WheelDownPane {
if -F "#{pane_in_mode}" {
send-keys -M # 如果已在复制模式,继续滚动
} {
send-keys -M # 否则直接发送滚轮事件(可能被终端处理)
}
}
# 左键拖动:选择文本或调整窗格(根据上下文自动判断)
bind -n MouseDrag1Pane if -F "#{mouse_any_flag}" {
if -F "#{pane_in_mode}" {
# 在复制模式中:继续选择文本
send-keys -M
} {
# 不在复制模式:调整窗格大小或交互
select-pane -M
}
}
# 左键单击:激活窗格或开始选择
bind -n MouseDown1Pane select-pane -M \; send-keys -M
# 确保终端兼容性(防止鼠标事件被拦截)
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
这个指令看zip文件里的文件数量,最后一行显示就是:
bash展开代码unzip -l img.zip | tail -n 10
比如显示:
bash展开代码--------- ------- 228209166917 1031993 files
解压后,假如解压到img目录,这个指令查看img目录下多少个文件:
bash展开代码find img -type f | wc -l
比如显示:
bash展开代码1031992
这是对的,举例来说因为里面有父目录信息:
bash展开代码root@gpu-a800-0051:~# unzip -l test.zip | tail -n 10
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
0 2025-07-19 01:23 test/
0 2025-07-19 01:23 test/1
0 2025-07-19 01:23 test/2
--------- -------
0 3 files
下载模型:
bash展开代码modelscope download Qwen/Qwen2.5-VL-7B-Instruct --local_dir ./Qwen/Qwen2.5-VL-7B-Instruct
模型位置:
bash展开代码/mnt/jfs/model/Qwen/Qwen2.5-VL-7B-Instruct
开启api:
bash展开代码python -m vllm.entrypoints.openai.api_server \ --model /mnt/jfs/model/Qwen/Qwen2.5-VL-7B-Instruct \ --gpu_memory_utilization 0.9 \ --tensor_parallel_size 2 \ --served-model-name gpt \ --port 8000
重启大法好。
powershell:
bash展开代码wsl --shutdown
bash展开代码wsl
JuiceFS 是一款高性能分布式文件系统,专为云环境设计,核心特点是将对象存储与缓存层结合,提供接近本地文件系统的性能体验。
展开代码[客户端应用] ← POSIX/FUSE接口 → [JuiceFS 客户端] ↓ [元数据引擎 (Redis/MySQL等)] ↓ [对象存储 (S3/OSS/HDFS等)]
分析 tokenizer_config.json
文件的设计,以及如何添加特殊token。结合代码来详细讲解 tokenizer_config.json
的设计原理以及如何添加特殊token。
错误信息显示 /root/.cache/huggingface/datasets/ 目录空间不够,无法创建临时文件。让我帮你查看相关代码并提供解决方案。
可以通过指定 --cache_dir
参数来将缓存路径设置到你的挂载存储上。根据代码分析,LlamaFactory 支持通过 cache_dir
参数来指定 Hugging Face 数据集和模型的缓存目录。
根据查看 Dockerfile 和 setup.py 文件,我可以为你解释 EXTRAS
参数的作用:
EXTRAS
参数的作用在 Docker 构建镜像时,EXTRAS
参数用于指定安装 LLaMA Factory 时需要包含的额外依赖项。它在 Dockerfile 的第 35 行被使用:
dockerfile展开代码RUN pip install --no-cache-dir -e ".[${EXTRAS}]" --no-build-isolation
这相当于执行:
bash展开代码pip install -e ".[metrics]"
最近用 LLaMA-Factory 训练大模型,数据都放在 AWS S3 上,发现其实不用自己写 boto3,直接用 S3 路径就能搞定。这里把我的踩坑和经验都写下来,帮你少走弯路。
LLaMA-Factory 支持直接从 S3 读取数据集,不用你自己写 boto3 脚本,也不用提前把数据下载到本地。你只要在配置里写上 S3 路径,比如 s3://my-bucket/data.jsonl
,剩下的都交给 LLaMA-Factory。
先执行git lfs install
是否可以,Ubuntu22 安装 git lfs 支持:
bash展开代码curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash sudo apt-get install git-lfs
比如我想clone这个数据集:https://huggingface.co/datasets/BAAI/SVIT
我应该huggingface登录后同意协议。
然后访问 https://huggingface.co/settings/tokens 创建 token 。
得到token hf_QtMqvBcwjKiYBQbHxCAbgazrSdCmPbf
我的用户名是 hugxd
那我在本地可以直接这样clone这个数据集仓库:
bash展开代码git clone https://hugxd:hf_QtMqvBcwjKiYBQbHxCAbgazrSdCmPbf@huggingface.co/datasets/BAAI/SVIT