swift微调多模态大语言模型

news2024/12/25 17:08:24

微调训练数据集指定方式的问题请教 · Issue #813 · modelscope/swift · GitHubQwen1.5微调训练脚本中,我用到了--dataset new_data.jsonl 这个选项, 可以训练成功,但我看文档有提到--custom_train_dataset_path这个选项,这两个有什么区别呢,是不是对自己生成的数据集用--dataset new_data.jsonl 这种方式是不对的,但是为什么又确实训练成功了呢(至少模型确实学习到了训练资料中的知识) # Experimental environment: A100 # 2*40GB GPU me...icon-default.png?t=N7T8https://github.com/modelscope/swift/issues/813swift/docs/source/Multi-Modal/qwen-vl最佳实践.md at main · modelscope/swift · GitHubms-swift: Use PEFT or Full-parameter to finetune 200+ LLMs or 15+ MLLMs - swift/docs/source/Multi-Modal/qwen-vl最佳实践.md at main · modelscope/swifticon-default.png?t=N7T8https://github.com/modelscope/swift/blob/main/docs/source/Multi-Modal/qwen-vl%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.mdhttps://github.com/modelscope/swift/blob/main/docs/source/LLM/%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.mdicon-default.png?t=N7T8https://github.com/modelscope/swift/blob/main/docs/source/LLM/%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.md1.数据格式

import json

# 从.json文件中读取数据
with open(r'E:\comprehensive_library\e_commerce_lmm\data\openi-zh-prompt.json', 'r', encoding='utf-8') as f:
    data = json.load(f)

# 数据格式转换
new_data = []
for d in data:
    new_conversations = dict()
    new_conversations["conversations"] = [
        {
            "from": "user",
            "value": f'Picture 1: <img>{d["img"]}</img>\n{d["prompt"]}'
        },
        {
            "from": "assistant",
            "value": d["label"]
        }
    ]
    new_data.append(new_conversations)

# 将转换后的数据写入新的.json文件中
with open('../data/openai-zh-swift-qwenvl-prompt.json', 'w', encoding='utf-8') as f:
    json.dump(new_data, f, ensure_ascii=False, indent=4)

和原版的qwen-vl的模板有一点区域别

[
    {"conversations": [
        {"from": "user", "value": "Picture 1:<img>img_path</img>\n11111"},
        {"from": "assistant", "value": "22222"}
    ]},
    {"conversations": [
        {"from": "user", "value": "Picture 1:<img>img_path</img>\nPicture 2:<img>img_path2</img>\nPicture 3:<img>img_path3</img>\naaaaa"},
        {"from": "assistant", "value": "bbbbb"},
        {"from": "user", "value": "Picture 1:<img>img_path</img>\nccccc"},
        {"from": "assistant", "value": "ddddd"}
    ]},
    {"conversations": [
        {"from": "user", "value": "AAAAA"},
        {"from": "assistant", "value": "BBBBB"},
        {"from": "user", "value": "CCCCC"},
        {"from": "assistant", "value": "DDDDD"}
    ]}
]

2,微调

# Experimental environment: 3090
# 23GB GPU memory
NPROC_PER_NODE=4 CUDA_VISIBLE_DEVICES=0,1,2,3 swift sft \
  --model_type qwen-vl-chat  \
  --model_id_or_path /home/image_team/image_team_docker_home/lgd/e_commerce_lmm/weights/qwen-vl-caht/   \
  --dataset /home/image_team/image_team_docker_home/lgd/e_commerce_lmm/data/openai-zh-swift-qwenvl-prompt.json \
  --sft_type lora \
  --tuner_backend peft \
  --template_type AUTO \
  --dtype AUTO \
  --output_dir output \
  --train_dataset_sample -1 \
  --num_train_epochs 5 \
  --max_length 2048 \
  --check_dataset_strategy warning \
  --lora_rank 8 \
  --lora_alpha 32 \
  --lora_dropout_p 0.05 \
  --lora_target_modules c_attn attn.c_proj w1 w2 \
  --gradient_checkpointing true \
  --batch_size 1 \
  --weight_decay 0.1 \
  --learning_rate 1e-4 \
  --gradient_accumulation_steps 4 \
  --max_grad_norm 0.5 \
  --warmup_ratio 0.03 \
  --eval_steps 100 \
  --save_steps 1000 \
  --save_total_limit 10 \
  --logging_steps 10 \
  --use_flash_attn false \

参数含义:

  • --model_type: 表示你选择的模型类型, 默认是Nonemodel_type指定了对应模型默认的lora_target_modulestemplate_type等信息. 你可以通过只指定model_type进行微调. 对应的model_id_or_path会使用默认的设置, 从ModelScope进行下载, 并使用默认的缓存路径. model_type和model_id_or_path必须指定其中的一个. 可以选择的model_type可以查看支持的模型.
  • --model_id_or_path: 表示模型在ModelScope Hub中的model_id或者本地路径, 默认为None. 如果传入的model_id_or_path已经被注册, 则会根据model_id_or_path推断出model_type. 如果未被注册, 则需要同时指定model_type, e.g. --model_type <model_type> --model_id_or_path <model_id_or_path>.
  • --model_revision: 表示模型在ModelScope Hub中对应model_id的版本号, 默认为Nonemodel_revision指定为None, 则使用注册在MODEL_MAPPING中的revision. 否则强制使用命令行传入的model_revision.
  • --sft_type: 表示微调的方式, 默认是'lora'. 你可以选择的值包括: 'lora', 'full', 'longlora', 'qalora'. 如果你要使用qlora, 你需设置--sft_type lora --quantization_bit 4.
  • --freeze_parameters: 当sft_type指定为'full'时, 将模型最底部的参数进行freeze. 指定范围为0. ~ 1., 默认为0.. 该参数提供了lora与全参数微调的折中方案.
  • --additional_trainable_parameters: 作为freeze_parameters的补充, 只有在sft_type指定为'full'才允许被使用, 默认为[]. 例如你如果想训练50%的参数的情况下想额外训练embedding层, 你可以设置--freeze_parameters 0.5 --additional_trainable_parameters transformer.wte, 所有以transformer.wte开头的parameters都会被激活.
  • --tuner_backend: 表示lora, qlora的后端支持, 默认是'peft'. 你可以选择的值包括: 'swift', 'peft', 'unsloth'.
  • --template_type: 表示使用的对话模板的类型, 默认是'AUTO', 即根据model_type查找MODEL_MAPPING中的template. 可以选择的template_type可以查看TEMPLATE_MAPPING.keys().
  • --output_dir: 表示ckpt存储的目录, 默认是'output'. 我们会在该目录后拼接model_type和微调版本号. 方便用户对不同模型进行多次对比实验, 而不需要改变output_dir命令行参数. 如果不需要拼接这些内容, 你需要额外指定参数--add_output_dir_suffix false.
  • --add_output_dir_suffix: 默认为True, 表示会在output_dir的目录后拼接上model_type和微调版本号的后缀. 如果要避免此行为, 你可以设置为False.
  • --ddp_backend: 表示分布式的后端支持, 默认是None. 你可以选择的值包括: 'nccl', 'gloo', 'mpi', 'ccl'.
  • --seed: 全局的seed, 默认使用42. 用于复现训练效果.
  • --resume_from_checkpoint: 用于断点续训, 默认为None. 你可以将其设置为checkpoint的路径, 例如: 'output/qwen-7b-chat/vx-xxx/checkpoint-xxx', 来进行断点续训.
  • --dtype: 基模型载入时的torch_dtype, 默认为'AUTO', 即智能选择dtype: 如果机器不支持bf16, 则使用fp16, 如果MODEL_MAPPING中对应模型有指定torch_dtype, 则使用其对应dtype, 否则使用bf16. 你可以选择的值包括: 'bf16', 'fp16', 'fp32'.
  • --dataset: 用于选择训练的数据集, 默认为[]. 可以选择的数据集可以查看支持的数据集. 如果需要使用多个数据集进行训练, 你可以使用','或者' '进行分割, 例如: --dataset alpaca-en,alpaca-zh or --dataset alpaca-en alpaca-zh.
  • --dataset_seed: 用于指定数据集处理的seed, 默认为42. 以random_state形式存在, 不影响全局seed.
  • --dataset_test_ratio: 用于指定子数据集切分成训练集和验证集的比例, 默认为0.01. 如果子数据集已经进行了训练集和验证集的切分, 则此参数无效.
  • --train_dataset_sample: 对训练集的采样数, 默认是-1, 即使用完整的训练集进行训练.
  • --val_dataset_sample: 对验证集进行采样, 默认是None, 自动选取合适数量的数据集数量进行验证. 如果你指定为-1, 则使用完整的验证集进行验证.
  • --system: 对话模板中使用的system, 默认为None, 即使用模型默认的system. 如果指定为'', 则不使用system.
  • --max_length: token的最大长度, 默认为2048. 可以避免个别过长的数据样本造成OOM的问题. 当指定--truncation_strategy delete时, 如果某数据样本长度超过max_length, 我们会删除该数据样本. 如果指定--truncation_strategy truncation_left时, 我们会切除最前面的token: input_ids[-max_length:]. 如果设置为-1, 则无限制.
  • --truncation_strategy: 默认是'delete'表示把超过max_length的句子从数据集中删除. 'truncation_left'表示会将超过文本的左边给切除掉, 这可能会切到special token, 会影响性能, 并不推荐.
  • --check_dataset_strategy: 默认值为'none', 即不做检查. 如果你训练的模型是LLM, 则推荐使用'warning'作为数据检查的策略. 如果你的训练目标为句子分类等任务, 则建议设置为'none'.
  • --custom_train_dataset_path: 默认值为[]. 具体的含义参考自定义与拓展.
  • --custom_val_dataset_path: 默认值为[]. 具体的含义参考自定义与拓展.
  • --self_cognition_sample: 自我认知数据集的采样数. 默认为0. 你该值设置为>0时, 需要同时指定--model_name--model_author. 如果你想了解更多, 可以查看自我认知微调最佳实践.
  • --model_name: 默认为[None, None]. 如果开启了自我认知数据集的采样(即self_cognition_sample>0), 你需要传入两个值, 分别代表模型的中文名和英文名. 例如: --model_name 小黄 'Xiao Huang'.
  • --model_author: 默认为[None, None]. 如果开启了自我认知数据集的采样, 你需要传入两个值, 分别代表作者的中文名和英文名. 例如: --model_author 魔搭 ModelScope.
  • --quantization_bit: 用于指定是否进行量化和量化的bit数, 默认为0, 即不进行量化. 如果要使用4bit qlora, 你需要设置--sft_type lora --quantization_bit 4
  • --bnb_4bit_comp_dtype: 在进行4bit量化时, 我们需要在模型的forward和backward时, 将其进行反量化. 该参数用于指定反量化后的torch_dtype. 默认为'AUTO', 即与dtype保持一致. 可选择的值包括: 'fp16', 'bf16', 'fp32'. 当quantization_bit为0时, 该参数无效.
  • --bnb_4bit_quant_type: 4bit量化时的量化方式, 默认是'nf4'. 可选择的值包括: 'nf4', 'fp4'. 当quantization_bit为0时, 该参数无效.
  • --bnb_4bit_use_double_quant: 是否在4bit量化时开启double量化, 默认为True. 当quantization_bit为0时, 该参数无效.
  • --bnb_4bit_quant_storage: 默认值为None. 量化参数的存储类型. 若quantization_bit设置为0, 则该参数失效.
  • --lora_target_modules: 指定lora模块, 默认为['DEFAULT']. 如果lora_target_modules传入'DEFAULT' or 'AUTO', 则根据model_type查找MODEL_MAPPING中的lora_target_modules(默认指定为qkv). 如果传入'ALL', 则将所有的Linear层(不含head)指定为lora模块. 如果传入'EMBEDDING', 则Embedding层指定为lora模块. 如果内存允许, 建议设置成'ALL'. 当然, 你也可以设置['ALL', 'EMBEDDING'], 将所有的Linear和embedding层指定为lora模块. 该参数只有当sft_type指定为'lora'时才生效.
  • --lora_rank: 默认为8. 只有当sft_type指定为'lora'时才生效.
  • --lora_alpha: 默认为32. 只有当sft_type指定为'lora'时才生效.
  • --lora_dropout_p: 默认为0.05, 只有当sft_type指定为'lora'时才生效.
  • --lora_bias_trainable: 默认为'none', 可以选择的值: 'none', 'all'. 如果你要将bias全都设置为可训练, 你可以设置为'all'.
  • --lora_modules_to_save: 默认为[]. 如果你想要训练embedding, lm_head, 或者layer_norm, 你可以设置此参数, 例如: --lora_modules_to_save EMBEDDING LN lm_head. 如果传入'EMBEDDING', 则将Embedding层添加到lora_modules_to_save. 如果传入'LN', 则将RMSNormLayerNorm添加到lora_modules_to_save.
  • --lora_dtype: 默认为'AUTO', 指定lora模块的dtype类型. 如果是AUTO则跟随原始模块的dtype类型. 你可以选择的值: 'fp16', 'bf16', 'fp32', 'AUTO'.
  • --use_dora: 默认为False, 是否使用DoRA.
  • --use_rslora: 默认为False, 是否使用RS-LoRA.
  • --neftune_noise_alphaNEFTune添加的噪声系数, 可以提升模型在指令微调中的性能, 默认为None. 通常可以设置为5, 10, 15. 你可以查看相关论文.
  • --neftune_backendNEFTune的backend,默认使用transformers库, 当训练VL模型时可能遇到不适配的情况, 此时建议指定为swift.
  • --gradient_checkpointing: 是否开启gradient checkpointing, 默认为True. 该参数可以用于节约显存, 虽然这会略微降低训练速度. 该参数在max_length较大, batch_size较大时作用显著.
  • --deepspeed: 用于指定deepspeed的配置文件的路径或者直接传入json格式的配置信息, 默认为None, 即不开启deepspeed. deepspeed可以节约显存. 我们书写了默认的ZeRO-2配置文件, ZeRO-3配置文件. 你只需要指定'default-zero2', 就会使用默认zero2配置文件; 指定'default-zero3', 就会使用默认的zero3配置文件.
  • --batch_size: 训练时的batch_size, 默认为1. 增大batch_size可以增加GPU的利用率, 但不一定会增加训练速度, 因为在一个batch中, 需要对较短的句子按该batch中最长句子的长度进行padding, 从而引入无效的计算量.
  • --eval_batch_size: 评估时的batch_size, 默认为None, 即当predict_with_generate为True时, 设置为1, 为False时, 设置为batch_size.
  • --num_train_epochs: 训练的epoch数, 默认为1. 如果max_steps >= 0, 则覆盖num_train_epochs. 你可以设置为3, 5, 10等.
  • --max_steps: 训练的max_steps数, 默认为-1. 如果max_steps >= 0, 则覆盖num_train_epochs.
  • --optim: 默认为'adamw_torch'.
  • --learning_rate: 默认值为None, 即如果sft_type为lora, 则设置为1e-4, 如果sft_type为full, 则设置为1e-5.
  • --weight_decay: 默认值为0.1.
  • --gradient_accumulation_steps: 梯度累加, 默认值为None, 设置为math.ceil(16 / self.batch_size / world_size)total_batch_size = batch_size * gradient_accumulation_steps * world_size.
  • --max_grad_norm: 梯度裁剪, 默认值为0.5.
  • --predict_with_generate: 评估时是否使用生成式的方式, 默认为False. 如果设置为False, 则使用loss进行评估. 如果设置为True, 则使用ROUGE-L等指标进行评估. 使用生成式评估耗费的时间很长, 请谨慎选择.
  • --lr_scheduler_type: 默认值为'linear', 你可以选择: 'linear', 'cosine', 'constant'等.
  • --warmup_ratio: warmup占用总的训练steps的比例, 默认为0.05.
  • --eval_steps: 每训练多少steps进行评估, 默认为50.
  • --save_steps: 每训练多少个steps进行保存, 默认为None, 即设置为eval_steps.
  • --save_only_model: 是否只保存模型参数, 而不存储断点续训所需的中间状态, 默认为None, 即如果sft_type为'lora'并且不使用deepspeed(deepspeedNone), 设置为False, 否则设置为True(e.g. 使用了全参数微调或者使用了deepspeed).
  • --save_total_limit: 保存的checkpoint的数量, 默认为2, 即保存best和last的checkpoint. 如果设置为-1, 则保存所有的checkpoint.
  • --logging_steps: 每训练多少步打印训练信息(e.g. loss, learning_rate等), 默认为5.
  • --dataloader_num_workers: 默认值为1.
  • --push_to_hub: 是否将训练的checkpoint同步推送到ModelScope Hub中, 默认为False.
  • --hub_model_id: 推送到的ModelScope Hub的model_id, 默认为None, 即设置为f'{model_type}-{sft_type}'. 你可以将其设置为model_id, 也可以设置为repo_name. 我们会根据hub_token推断出user_name. 推送的远程仓库如果不存在, 则会创建一个新的仓库, 如果存在, 则复用之前的仓库. 该参数只有在push_to_hub设置为True时才生效.
  • --hub_token: 推送时需要的SDK token. 可以从魔搭社区获取, 默认为None, 即从环境变量MODELSCOPE_API_TOKEN中获取. 该参数只有在push_to_hub设置为True时才生效.
  • --hub_private_repo: 推送的ModelScope Hub中的模型仓库的权限是否设置为私有, 默认为False. 该参数只有在push_to_hub设置为True时才生效.
  • --push_hub_strategy: 推送策略, 默认为'push_best'. 可选择的值包括: 'end', 'push_best', 'push_last', 'checkpoint', 'all_checkpoints'. 'push_best'表示在每次保存权重时, 将最好的模型进行推送并覆盖之前的权重, 'push_last'表示在每次保存权重时, 将最后的权重进行推送并覆盖之前的权重, 'end'表示只在训练的最后推送最好的模型. 该参数只有在push_to_hub设置为True时才生效.
  • --test_oom_error: 用于检测训练是否会发生OOM, 默认为False. 如果设置为True, 则会将训练集按max_length倒序进行排列, 方便OOM的测试. 该参数一般用于测试, 请谨慎设置.
  • --disable_tqdm: 是否不启用tqdm, 这在nohup启动脚本时很有用. 默认为False, 即为启动tqdm.
  • --lazy_tokenize: 如果设置为False, 则在trainer.train()之前提前对所有文本进行预处理. 如果设置为True, 则延迟对文本进行编码, 减少预处理的等待并减少内存占用, 这在处理大数据集时很有用. 默认为None, 即我们会根据template的类型进行智能选择, LLM的模型通常设置为False, 多模态的模型通常设置为True(避免图片和音频加载导致过多的内存占用).
  • --preprocess_num_proc: 在对数据集预处理时(对文本进行tokenize), 使用多进程. 默认为1. 与lazy_tokenize命令行参数一样, 用于解决预处理速度慢的问题. 但该策略无法减少内存占用, 所以如果当数据集巨大时, 建议使用lazy_tokenize. 推荐设置的值: 4, 8. 请注意: 当使用qwen-audio时, 该参数会强制设置为1, 因为qwen-audio的预处理函数中使用了torch的多进程, 会造成不兼容问题.
  • --use_flash_attn: 是否使用flash attn, 默认为None. 安装flash_attn的步骤可以查看GitHub - Dao-AILab/flash-attention: Fast and memory-efficient exact attention. 支持flash_attn的模型可以查看LLM支持的模型.
  • --ignore_args_error: 是否忽略命令行传参错误抛出的Error, 默认为False. 如果需要拷贝代码到notebook中运行, 需要设置成True.
  • --check_model_is_latest: 检查模型是否是最新, 默认为True. 如果你需要断网进行训练, 请将该参数设置为False.
  • --logging_dir: 默认为None. 即设置为f'{self.output_dir}/runs', 表示tensorboard文件存储路径.
  • --report_to: 默认为['tensorboard'].
  • --acc_strategy: 默认为'token', 可选择的值包括: 'token', 'sentence'.
  • --save_on_each_node: 该参数在多机训练时生效, 默认为True.
  • --save_strategy: 保存checkpoint的策略, 默认为'steps', 可选择的值包括: 'steps', 'no'.
  • --save_safetensors: 默认为True.
  • --include_num_input_tokens_seen: 默认为False. 跟踪整个训练过程中观察到的输入tokens的数量.
  • --max_new_tokens: 默认为2048. 该参数只有在predict_with_generate设置为True的时候才生效.
  • --do_sample: 默认为True. 该参数只有在predict_with_generate设置为True的时候才生效.
  • --temperature: 默认为0.3. 该参数只有在predict_with_generate设置为True的时候才生效.
  • --top_k: 默认为20. 该参数只有在predict_with_generate设置为True的时候才生效.
  • --top_p: 默认为0.7. 该参数只有在predict_with_generate设置为True的时候才生效.
  • --repetition_penalty: 默认为1.. 该参数只有在predict_with_generate设置为True的时候才生效.
  • --num_beams: 默认为1. 该参数只有在predict_with_generate设置为True的时候才生效.
  • --gpu_memory_fraction: 默认为None. 该参数旨在指定显卡最大可用显存比例的情况下运行训练,用于极限测试.
  • --train_dataset_mix_ratio: 默认为0.. 该参数定义了如何进行数据集打混训练. 指定该参数时, 会混合训练集的train_dataset_mix_ratio倍数的train_dataset_mix_ds指定的通用知识数据集.
  • --train_dataset_mix_ds: 默认为['ms-bench']. 用于防止知识遗忘的通用知识数据集.
  • --use_loss_scale: 默认为False. 生效时会将Agent的部分字段(Action/Action Input部分)的loss权重加强以强化CoT, 对普通SFT场景没有任何效果.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1644199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C 认识指针

目录 一、取地址操作符&#xff08;&&#xff09; 二、解引用操作符&#xff08;*&#xff09; 三、指针变量 1、 指针变量的大小 2、 指针变量类型的意义 2.1 指针的解引用 2.2 指针 - 整数 2.3 调试解决疑惑 认识指针&#xff0c;指针比较害羞内敛&#xff0c;我们…

局域网唤醒平台:UpSnap

简介&#xff1a;UpSnap是一个简单的唤醒局域网网络应用程序。UpSnap为每个用户、每个设备提供了唯一的访问权限。虽然管理员拥有所有权限&#xff0c;但他们可以为用户分配特定的权限&#xff0c;如显示/隐藏设备、访问设备编辑、删除和打开/关闭设备电源。 历史攻略&#xf…

Nginx(参数设置总结)

文章目录 Nginx&#xff08;工作机制&参数设置&#xff09;1.Master&Worker工作机制1.示意图2.解释3.Nginx争抢机制4.accept_mutex解决惊群现象5.多进程结构不用多线程结构的好处6.IO多路复用&#xff0c;实现高并发7.优势 2.参数配置1.work_processes1.基本介绍2.work…

智慧旅游引领未来风尚,科技助力旅行更精彩:科技的力量推动旅游业创新发展,为旅行者带来更加便捷、高效和智能的旅行服务

目录 一、引言 二、智慧旅游的概念与特点 &#xff08;一&#xff09;智慧旅游的概念 &#xff08;二&#xff09;智慧旅游的特点 三、科技推动旅游业创新发展 &#xff08;一&#xff09;大数据技术的应用 &#xff08;二&#xff09;人工智能技术的应用 &#xff08;…

Android Binder机制

一.简介 Binder是什么&#xff1f; Android系统中&#xff0c;涉及到多进程间的通信底层都是依赖于Binder IPC机制。 例如当进程A中的Activity要向进程B中的Service通信&#xff0c;这便需要依赖于Binder IPC。不仅于 此&#xff0c;整个Android系统架构中&#xff0c;大量采…

企业计算机服务器中了rmallox勒索病毒怎么处理,rmallox勒索病毒解密恢复

网络在为企业提供便利的同时&#xff0c;也为企业的数据安全带来严重威胁。随着网络技术的不断发展&#xff0c;越来越多的企业利用网络开展各项工作业务&#xff0c;网络数据安全问题&#xff0c;一直成为企业关心的主要话题&#xff0c;但网络威胁随着网络技术的不断成熟&…

18_Scala面向对象编程trait

文章目录 trait1.定义trait2.向类中混入特质2.1没有父类2.2有父类 3.动态混入3.1动态混入查询功能到公司业务中 4.父类&#xff0c;子类&#xff0c;特质初始化优先级5.Scala功能执行顺序6.常用API trait –特质的学习需要类比Java中的接口&#xff0c;源码编译之后就是interf…

【DPU系列之】Bluefield 2 DPU卡的功能图,ConnectX网卡、ARM OS、Host OS的关系?(通过PCIe Switch连接)

核心要点&#xff1a; CX系列网卡与ARM中间有一个PCIe Swtich的硬件单元链接。 简要记录。 可以看到图中两个灰色框&#xff0c;上端是Host主机&#xff0c;下端是BlueField DPU卡。图中是BF2的图&#xff0c;是BF2用的是DDR4。DPU上的Connect系列网卡以及ARM系统之间有一个…

解决Maven本地仓库存在依赖包还需要远程下载的问题

背景 公司有自己maven私服&#xff0c;正在在私服可以使用的情况&#xff0c;打包是没问题的。但是这次是由于公司大楼整体因电路检修而停电&#xff0c;所有服务器关机&#xff0c;包括maven私服服务器。然后当天确有一个包需要打&#xff0c;这个时候发现死活打不了&#xf…

学习3:scrapy请求对象、模拟登录、POST请求、管道的使用、crawlspider爬虫类

请求对象 请求对象参数 scrapy.Request(url[],callback,method"GET",headers,body,cookies,meta,dont_filterFalse)callback 表示当前的url响应交给那个函数去处理method 指定请求方式headers 接受一个字典&#xff0c;其中不包括cookiesbody 接收json字符串&#…

vs 2022 Xamarin 生成 Android apk

再保存&#xff0c;如果没有生成apk就重启软件 再试一次

【hive】transform脚本

文档地址&#xff1a;https://cwiki.apache.org/confluence/display/Hive/LanguageManualTransform 一、介绍二、实现1.脚本上传到本地2.脚本上传到hdfs 三、几个需要注意的点1.脚本名不要写全路径2.using后面语句中&#xff0c;带不带"python"的问题3.py脚本Shebang…

list 的模拟实现

目录 1. list 的实现框架 2. push_back 3. 迭代器 4. constructor 4.1. default 4.2. fill 4.3. range 4.4. initializer list 5. insert 6. erase 7. clear 和 destructor 8. copy constructor 9. operator 10. const_iterator 10.1. 普通人的处理方案 10.2. …

基于Java EE平台项目管理系统的设计与实现(论文 + 源码)

【免费】基于javaEE平台的项目管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89267688 基于Java EE平台项目管理系统的设计与实现 摘 要 随着社会信息化的发展&#xff0c;很多的社会管理问题也一并出现了根本性变化&#xff0c;项目公司的报表及文…

Linux网络部分——DHCP、FTP

目录 一、DHCP动态主机配置协议 1. DHCP工作原理&#xff08;流程&#xff09; 2. 使用DHCP的好处 3.DHCP的分配方式 4.DHCP安装和配置【☆】 二、FTP文件传输协议 1. FTP传输模式 2.FTP安装与配置【☆】 3. FTP设置白名单和黑名单【☆】 一、DHCP动态主机配置协议 DH…

自动驾驶融合定位系列教程五:惯性导航误差分析

自动驾驶融合定位系列教程五&#xff1a;惯性导航误差分析 一、概述 在定位领域的几乎所有多传感器融合系统中&#xff0c;都有IMU存在&#xff0c;而且&#xff0c;IMU是定位系统的主线与核心&#xff08;对此可能很多人并不同意&#xff0c;但是我仍然坚定地坚持这一观点&a…

GPU通用计算介绍

谈到 GPU &#xff08;Graphics Processing Unit&#xff0c;图形显示卡&#xff09;大多数人想到的是游戏、图形渲染等这些词汇&#xff0c;图形处理确实是 GPU 的一大应用场景。然而人们也早已关注到它在通用计算上的巨大潜力&#xff0c;并提出了 GPGPU (General-purpose co…

【精品毕设推荐】基于JSP物流信息网的设计与实现

点击免费下载原文及代码、PPT 摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发&#xff0c;使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主…

【网络原理】HTTPS 的工作过程

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

libcity笔记:参数设置与参数优先级

1 参数优先级 高优先级的参数会覆盖低优先级的同名参数 Libcity中的优先级顺序维&#xff1a; 命令行参数&#xff08;命令行python run_model.py时导入的&#xff09; > 用户定义配置文件&#xff08;命令行python run_model.py时由config_file导入的&#xff09; >…