open-instruct框架使用记录:只使用huggingface数据集的小部分进行训练,如何修改dataset_info.json文件

open-instruct框架

这篇笔记主要记录以下问题:只使用huggingface下载的数据集中的一小部分数据进行数据训练。而且我不想修改open-instruct的加载数据集的代码,以及脚本中的--dataset_mixer_list参数的指定等。下面是我的思路历程。

 if args.dataset_name is not None:# Downloading and loading a dataset from the hub.raw_datasets = load_dataset(args.dataset_name,args.dataset_config_name,)elif args.dataset_mixer is not None:# mixing datasets via configraw_datasets = get_datasets(args.dataset_mixer,configs=args.dataset_config_name,splits=["train"],save_data_dir=args.dataset_mix_dir if accelerator.is_main_process else None,columns_to_keep=["messages"],)elif args.dataset_mixer_list is not None:# mixing datasets via configraw_datasets = get_datasets(args.dataset_mixer_list,configs=args.dataset_config_name,splits=["train"],save_data_dir=args.dataset_mix_dir if accelerator.is_main_process else None,columns_to_keep=["messages"],)

我在复现一个开源项目,tulu3大模型相关的项目。用的是open-instruct框架,测试的是https://huggingface.co/datasets/allenai/tulu-3-sft-mixture这个数据集,它的data如下,可以看到有6个parquet文件。

在这里插入图片描述

按照这个md文档:https://github.com/allenai/open-instruct/blob/main/docs/tulu3.md,进行的是这个实验:Llama-3.1-Tulu-3-8B-SFT Reproduction, 训练脚本如下:train.sh,需要修改适配到自己的服务器水平,这里只是复制过来官方github仓库的脚本。

# modify the following `MACHINE_RANK`, `MAIN_PROCESS_IP`,
# `NUM_MACHINES`, `NUM_PROCESSES`, `PER_DEVICE_TRAIN_BATCH_SIZE`,
# `GRADIENT_ACCUMULATION_STEPS` according to your setup
MACHINE_RANK=0
MAIN_PROCESS_IP=localhost
NUM_MACHINES=8
NUM_PROCESSES=64
PER_DEVICE_TRAIN_BATCH_SIZE=1
GRADIENT_ACCUMULATION_STEPS=2
accelerate launch \--mixed_precision bf16 \--num_machines 8 \--num_processes 64 \--machine_rank $MACHINE_RANK \--main_process_ip $MAIN_PROCESS_IP \--main_process_port 29400 \--use_deepspeed \--deepspeed_config_file configs/ds_configs/stage3_no_offloading_accelerate.conf \--deepspeed_multinode_launcher standard open_instruct/finetune.py \--model_name_or_path meta-llama/Llama-3.1-8B \--tokenizer_name meta-llama/Llama-3.1-8B \--use_slow_tokenizer \--use_flash_attn \--max_seq_length 4096 \--preprocessing_num_workers 128 \--per_device_train_batch_size $PER_DEVICE_TRAIN_BATCH_SIZE \--gradient_accumulation_steps $GRADIENT_ACCUMULATION_STEPS \--learning_rate 5e-06 \--lr_scheduler_type linear \--warmup_ratio 0.03 \--weight_decay 0.0 \--num_train_epochs 2 \--output_dir output/sft_8b \--with_tracking \--report_to wandb \--logging_steps 1 \--reduce_loss sum \--model_revision main \--dataset_mixer_list allenai/tulu-3-sft-mixture 1.0 \--checkpointing_steps epoch \--dataset_mix_dir output/sft_8b \--exp_name tulu-3-8b-sft \--seed 123

可以看到 --dataset_mixer_list allenai/tulu-3-sft-mixture 1.0用到了这个数据集,我提前下载到本地:

from datasets import Dataset, load_dataset, load_from_disk
# dataset = load_dataset("allenai/tulu-v2-sft-mixture")
dataset = load_dataset("allenai/tulu-3-sft-mixture")
dataset

按照hf默认的设置,会下载到这个路径

.cache/huggingface/datasets/allenai___tulu-3-sft-mixture/default/0.0.0/55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91

这个路径后面的一些奇怪的数字和字母是hf自动生成的,比如版本号0.0.0之类。

可以看到,如果按照hf默认的load_dataset会产生如此多的文件,这里借助chatGPT解释一下:

$~/.cache/huggingface/datasets/allenai___tulu-3-sft-mixture/default/0.0.0/55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91$ ls
cache-794e135b6dcca119.arrow                 cache-aab3a83f436933f5_00046_of_00128.arrow  cache-aab3a83f436933f5_00095_of_00128.arrow
cache-954e0d1f5d398acc.arrow                 cache-aab3a83f436933f5_00047_of_00128.arrow  cache-aab3a83f436933f5_00096_of_00128.arrow
cache-a3b8d15dc24b3207.arrow                 cache-aab3a83f436933f5_00048_of_00128.arrow  cache-aab3a83f436933f5_00097_of_00128.arrow
cache-aab3a83f436933f5_00000_of_00128.arrow  cache-aab3a83f436933f5_00049_of_00128.arrow  cache-aab3a83f436933f5_00098_of_00128.arrow
cache-aab3a83f436933f5_00001_of_00128.arrow  cache-aab3a83f436933f5_00050_of_00128.arrow  cache-aab3a83f436933f5_00099_of_00128.arrow
cache-aab3a83f436933f5_00002_of_00128.arrow  cache-aab3a83f436933f5_00051_of_00128.arrow  cache-aab3a83f436933f5_00100_of_00128.arrow
cache-aab3a83f436933f5_00003_of_00128.arrow  cache-aab3a83f436933f5_00052_of_00128.arrow  cache-aab3a83f436933f5_00101_of_00128.arrow
cache-aab3a83f436933f5_00004_of_00128.arrow  cache-aab3a83f436933f5_00053_of_00128.arrow  cache-aab3a83f436933f5_00102_of_00128.arrow
cache-aab3a83f436933f5_00005_of_00128.arrow  cache-aab3a83f436933f5_00054_of_00128.arrow  cache-aab3a83f436933f5_00103_of_00128.arrow
cache-aab3a83f436933f5_00006_of_00128.arrow  cache-aab3a83f436933f5_00055_of_00128.arrow  cache-aab3a83f436933f5_00104_of_00128.arrow
cache-aab3a83f436933f5_00007_of_00128.arrow  cache-aab3a83f436933f5_00056_of_00128.arrow  cache-aab3a83f436933f5_00105_of_00128.arrow
cache-aab3a83f436933f5_00008_of_00128.arrow  cache-aab3a83f436933f5_00057_of_00128.arrow  cache-aab3a83f436933f5_00106_of_00128.arrow
cache-aab3a83f436933f5_00009_of_00128.arrow  cache-aab3a83f436933f5_00058_of_00128.arrow  cache-aab3a83f436933f5_00107_of_00128.arrow
cache-aab3a83f436933f5_00010_of_00128.arrow  cache-aab3a83f436933f5_00059_of_00128.arrow  cache-aab3a83f436933f5_00108_of_00128.arrow
cache-aab3a83f436933f5_00011_of_00128.arrow  cache-aab3a83f436933f5_00060_of_00128.arrow  cache-aab3a83f436933f5_00109_of_00128.arrow
cache-aab3a83f436933f5_00012_of_00128.arrow  cache-aab3a83f436933f5_00061_of_00128.arrow  cache-aab3a83f436933f5_00110_of_00128.arrow
cache-aab3a83f436933f5_00013_of_00128.arrow  cache-aab3a83f436933f5_00062_of_00128.arrow  cache-aab3a83f436933f5_00111_of_00128.arrow
cache-aab3a83f436933f5_00014_of_00128.arrow  cache-aab3a83f436933f5_00063_of_00128.arrow  cache-aab3a83f436933f5_00112_of_00128.arrow
cache-aab3a83f436933f5_00015_of_00128.arrow  cache-aab3a83f436933f5_00064_of_00128.arrow  cache-aab3a83f436933f5_00113_of_00128.arrow
cache-aab3a83f436933f5_00016_of_00128.arrow  cache-aab3a83f436933f5_00065_of_00128.arrow  cache-aab3a83f436933f5_00114_of_00128.arrow
cache-aab3a83f436933f5_00017_of_00128.arrow  cache-aab3a83f436933f5_00066_of_00128.arrow  cache-aab3a83f436933f5_00115_of_00128.arrow
cache-aab3a83f436933f5_00018_of_00128.arrow  cache-aab3a83f436933f5_00067_of_00128.arrow  cache-aab3a83f436933f5_00116_of_00128.arrow
cache-aab3a83f436933f5_00019_of_00128.arrow  cache-aab3a83f436933f5_00068_of_00128.arrow  cache-aab3a83f436933f5_00117_of_00128.arrow
cache-aab3a83f436933f5_00020_of_00128.arrow  cache-aab3a83f436933f5_00069_of_00128.arrow  cache-aab3a83f436933f5_00118_of_00128.arrow
cache-aab3a83f436933f5_00021_of_00128.arrow  cache-aab3a83f436933f5_00070_of_00128.arrow  cache-aab3a83f436933f5_00119_of_00128.arrow
cache-aab3a83f436933f5_00022_of_00128.arrow  cache-aab3a83f436933f5_00071_of_00128.arrow  cache-aab3a83f436933f5_00120_of_00128.arrow
cache-aab3a83f436933f5_00023_of_00128.arrow  cache-aab3a83f436933f5_00072_of_00128.arrow  cache-aab3a83f436933f5_00121_of_00128.arrow
cache-aab3a83f436933f5_00024_of_00128.arrow  cache-aab3a83f436933f5_00073_of_00128.arrow  cache-aab3a83f436933f5_00122_of_00128.arrow
cache-aab3a83f436933f5_00025_of_00128.arrow  cache-aab3a83f436933f5_00074_of_00128.arrow  cache-aab3a83f436933f5_00123_of_00128.arrow
cache-aab3a83f436933f5_00026_of_00128.arrow  cache-aab3a83f436933f5_00075_of_00128.arrow  cache-aab3a83f436933f5_00124_of_00128.arrow
cache-aab3a83f436933f5_00027_of_00128.arrow  cache-aab3a83f436933f5_00076_of_00128.arrow  cache-aab3a83f436933f5_00125_of_00128.arrow
cache-aab3a83f436933f5_00028_of_00128.arrow  cache-aab3a83f436933f5_00077_of_00128.arrow  cache-aab3a83f436933f5_00126_of_00128.arrow
cache-aab3a83f436933f5_00029_of_00128.arrow  cache-aab3a83f436933f5_00078_of_00128.arrow  cache-aab3a83f436933f5_00127_of_00128.arrow
cache-aab3a83f436933f5_00030_of_00128.arrow  cache-aab3a83f436933f5_00079_of_00128.arrow  dataset_info.json
cache-aab3a83f436933f5_00031_of_00128.arrow  cache-aab3a83f436933f5_00080_of_00128.arrow  tmpaev1r_w4
cache-aab3a83f436933f5_00032_of_00128.arrow  cache-aab3a83f436933f5_00081_of_00128.arrow  tmpd7g5_grl
cache-aab3a83f436933f5_00033_of_00128.arrow  cache-aab3a83f436933f5_00082_of_00128.arrow  tmpdgek340a
cache-aab3a83f436933f5_00034_of_00128.arrow  cache-aab3a83f436933f5_00083_of_00128.arrow  tmpdwqnn302
cache-aab3a83f436933f5_00035_of_00128.arrow  cache-aab3a83f436933f5_00084_of_00128.arrow  tmpk3m7aupe
cache-aab3a83f436933f5_00036_of_00128.arrow  cache-aab3a83f436933f5_00085_of_00128.arrow  tmpnh95gfj4
cache-aab3a83f436933f5_00037_of_00128.arrow  cache-aab3a83f436933f5_00086_of_00128.arrow  tmpuaxtwh_k
cache-aab3a83f436933f5_00038_of_00128.arrow  cache-aab3a83f436933f5_00087_of_00128.arrow  tmpusl88bwl
cache-aab3a83f436933f5_00039_of_00128.arrow  cache-aab3a83f436933f5_00088_of_00128.arrow  tulu-3-sft-mixture-train-00000-of-00006.arrow
cache-aab3a83f436933f5_00040_of_00128.arrow  cache-aab3a83f436933f5_00089_of_00128.arrow  tulu-3-sft-mixture-train-00001-of-00006.arrow
cache-aab3a83f436933f5_00041_of_00128.arrow  cache-aab3a83f436933f5_00090_of_00128.arrow  tulu-3-sft-mixture-train-00002-of-00006.arrow
cache-aab3a83f436933f5_00042_of_00128.arrow  cache-aab3a83f436933f5_00091_of_00128.arrow  tulu-3-sft-mixture-train-00003-of-00006.arrow
cache-aab3a83f436933f5_00043_of_00128.arrow  cache-aab3a83f436933f5_00092_of_00128.arrow  tulu-3-sft-mixture-train-00004-of-00006.arrow
cache-aab3a83f436933f5_00044_of_00128.arrow  cache-aab3a83f436933f5_00093_of_00128.arrow  tulu-3-sft-mixture-train-00005-of-00006.arrow
cache-aab3a83f436933f5_00045_of_00128.arrow  cache-aab3a83f436933f5_00094_of_00128.arrow

解释如下:

Hugging Face 数据集缓存目录下载文件的特点

从 Hugging Face 数据集缓存目录下载的这些文件有以下特点和作用,以下是对不同文件的详细解释:


1. cache-\*.arrow 文件

这些文件是 Hugging Face 数据集使用 Apache Arrow 格式存储的中间缓存文件,主要用于高效的数据处理和存储。文件命名规则和用途如下:

命名规则
  • 类似

    cache-aab3a83f436933f5_00000_of_00128.arrow
    

    的文件表示:

    • 00000_of_00128: 数据集被切分为 128 个分块,这里是第一个分块。
    • 每个分块可以包含一部分数据样本,以便大数据集可以逐块加载处理,避免内存不足问题。
用途
  • 高速加载:Hugging Face 数据集库会先将原始数据转换为 Arrow 格式,这种格式支持高效的序列化和快速的数据读取。
  • 分块存储:当数据集太大时,会分成多个 Arrow 分块文件(如 00128 块),使数据处理更加灵活。
为什么生成多个 cache-* 文件?
  • 如果数据集较大(如数十 GB),将其分块存储在多个 .arrow 文件中可以减少加载时间,并支持流式读取。

2. tulu-3-sft-mixture-train-\*.arrow 文件

这些是你指定数据集(tulu-3-sft-mixture)的训练数据文件,每个文件中包含不同的一部分数据集样本。

命名规则
  • 文件名如 tulu-3-sft-mixture-train-00000-of-00006.arrow,表示这是 tulu-3-sft-mixture 数据集的第 1 个分块,共有 6 个分块。
  • 每个文件是训练数据的分块,类似于 cache-* 文件。
用途
  • 每个分块包含一部分训练数据,支持按需加载整个数据集。
  • 在训练任务中,通常会逐块加载这些文件的数据以优化内存使用。

3. dataset_info.json 文件

该文件包含数据集的元信息(metadata),描述了数据集的以下内容:

  • 版本信息:如数据集版本号和格式版本。
  • 列信息:数据集中字段的名称及类型(如 text 是字符串,label 是整数)。
  • 样本统计:数据集样本的总数,以及每个分块包含的样本数量。
  • 分割描述:训练、验证和测试集的比例及文件路径。

这个文件是 Hugging Face 数据集加载的核心参考,用于理解数据集的结构。


4. 临时文件 (tmp\*)

类似 tmpaev1r_w4tmpuaxtwh_k 等文件或文件夹是 Hugging Face 在加载和处理数据时的临时缓存,用于:

  • 解压原始数据。
  • 临时保存未完全转换的数据。

这些文件通常会在数据集加载完成后自动删除,属于中间状态。


总结:

  1. cache-\*tulu-3-sft-mixture-train-\* 是 Arrow 格式存储的数据分块,用于高效读取训练数据。
  2. dataset_info.json 是数据集结构和元信息的描述文件。
  3. tmp\* 文件 是临时缓存,加载后可忽略。

我的需求

我现在主要研究代码能不能跑通,以及是否爆显存等问题,所以想只用一小部分数据集来测试,由于我们用到的是下面6个训练数据集(也就是上文看到的对应的parquet文件,只不过变成arrow后缀: 这种情况通常是 Hugging Face 的 datasets 库在下载数据集时,自动将原始 .parquet 文件转换为 .arrow 格式以优化加载性能。),这里只想用第一个tulu-3-sft-mixture-train-00000-of-00006.arrow来测试。需要做哪些修改呢?

tulu-3-sft-mixture-train-00000-of-00006.arrow
tulu-3-sft-mixture-train-00001-of-00006.arrow
tulu-3-sft-mixture-train-00002-of-00006.arrow
tulu-3-sft-mixture-train-00003-of-00006.arrow
tulu-3-sft-mixture-train-00004-of-00006.arrow
tulu-3-sft-mixture-train-00005-of-00006.arrow

对应的parquet文件如下:

在这里插入图片描述

下面是我的做法:我在open-instruct框架中,不想修改它的源码和更改bash脚本,想直接用hf默认的加载数据集的方式,就是从本地.cache文件夹下面加载。

直接新建如下目录:先把之前的文件夹allenai___tulu-3-sft-mixture改为allenai___tulu-3-sft-mixture1,用于存放原本的数据集。然后新建allenai___tulu-3-sft-mixture文件夹,当然它下面的子文件夹也需要创建,不能更改一个字。

在这里插入图片描述

可以使用linux命令来生成路径

mkdir -p /.cache/huggingface/datasets/allenai___tulu-3-sft-mixture/default/0.0.0/55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91

然后复制过来需要的tulu-3-sft-mixture-train-00000-of-00006.arrowdataset_info.json文件,其中后者必不可少,因为**dataset_info.json** 是数据集结构和元信息的描述文件。

先看一下源数据集的dataset_info.json文件如下:

{"description": "","citation": "","homepage": "","license": "","features": {"id": {"dtype": "string","_type": "Value"},"messages": [{"content": {"dtype": "string","_type": "Value"},"role": {"dtype": "string","_type": "Value"}}],"source": {"dtype": "string","_type": "Value"}},"builder_name": "parquet","dataset_name": "tulu-3-sft-mixture","config_name": "default","version": {"version_str": "0.0.0","major": 0,"minor": 0,"patch": 0},"splits": {"train": {"name": "train","num_bytes": 2914253735,"num_examples": 939343,"shard_lengths": [139000,46558,86000,192557,217114,258114],"dataset_name": "tulu-3-sft-mixture"}},"download_checksums": {"hf://datasets/allenai/tulu-3-sft-mixture@55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91/data/train-00000-of-00006.parquet": {"num_bytes": 361046463,"checksum": null},"hf://datasets/allenai/tulu-3-sft-mixture@55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91/data/train-00001-of-00006.parquet": {"num_bytes": 477019443,"checksum": null},"hf://datasets/allenai/tulu-3-sft-mixture@55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91/data/train-00002-of-00006.parquet": {"num_bytes": 146926607,"checksum": null},"hf://datasets/allenai/tulu-3-sft-mixture@55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91/data/train-00003-of-00006.parquet": {"num_bytes": 162138577,"checksum": null},"hf://datasets/allenai/tulu-3-sft-mixture@55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91/data/train-00004-of-00006.parquet": {"num_bytes": 149552548,"checksum": null},"hf://datasets/allenai/tulu-3-sft-mixture@55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91/data/train-00005-of-00006.parquet": {"num_bytes": 116271230,"checksum": null}},"download_size": 1412954868,"dataset_size": 2914253735,"size_in_bytes": 4327208603
}

可以看到,里面涉及所有需要用到的数据集的信息,需要修改为适合只有一个arrow文件的情况,否则会报错,比如下面这样:

执行脚本bash train.sh,出现找不到文件Failed to open local file的错误。下面是我对GPT的prompt:

现在我只用了一个arrow文件,不想用后面剩余的arrow文件,
出现报错:[rank2]: FileNotFoundError: [Errno 2] Failed to open local file '/.cache/huggingface/datasets/allenai___tulu-3-sft-mixture/default/0.0.0/55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91/tulu-3-sft-mixture-train-00001-of-00006.arrow'. Detail: [errno 2] No such file or directory这里的00001 of 00006,我只有00000我需要怎么更改,
下面是dataset_info.json文件:复制过来上面的dataset_info.json文件内容

它帮我把数据集的dataset_info.json文件改为:

{"description": "","citation": "","homepage": "","license": "","features": {"id": {"dtype": "string","_type": "Value"},"messages": [{"content": {"dtype": "string","_type": "Value"},"role": {"dtype": "string","_type": "Value"}}],"source": {"dtype": "string","_type": "Value"}},"builder_name": "parquet","dataset_name": "tulu-3-sft-mixture","config_name": "default","version": {"version_str": "0.0.0","major": 0,"minor": 0,"patch": 0},"splits": {"train": {"name": "train","num_bytes": 361046463,"num_examples": 139000,"shard_lengths": [139000],"dataset_name": "tulu-3-sft-mixture"}},"download_checksums": {"hf://datasets/allenai/tulu-3-sft-mixture@55e9fd6d41c3cd1a98270dff07557bc2a1e1ba91/data/train-00000-of-00006.parquet": {"num_bytes": 361046463,"checksum": null}},"download_size": 361046463,"dataset_size": 361046463,"size_in_bytes": 361046463}

修改细节说明

  1. splits 部分
    • shard_lengthsnum_examples 修改为只对应第一个分片的数据,保留 139,000 个样本。
    • num_bytes 修改为该分片的大小:361046463 字节。
  2. download_checksums 部分
    • 仅保留第一个分片的路径和大小。
  3. 总大小更新
    • download_sizedataset_size 更新为第一个分片的大小。
  4. size_in_bytes 更新
    • 同样只反映第一个分片的大小。

然后记得将原文件名tulu-3-sft-mixture-train-00000-of-00006.arrow改为tulu-3-sft-mixture-train-00000-of-00001.arrow,因为只有一个arrow文件。

然后就可以执行bash train.sh啦,这样就达到了只使用一小部分数据集来训练模型(测试框架等)的目的。

后记

2024年11月27日12点10分于上海。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins升级到最新版本后无法启动

1. 场景还原 最近在web界面将jenkins升级到最新版本后,后台无法启动jenkins服务,服务状态如下: 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…

DRM(数字权限管理技术)防截屏录屏----ffmpeg安装

提示:ffmpeg安装 文章目录 [TOC](文章目录) 前言一、下载二、配置环境变量三、运行ffmpeg四、文档总结 前言 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的…

Unity版本使用情况统计(更新至2024年11月)

UWA发布|本期UWA发布的内容是第十五期Unity版本使用统计,统计周期为2024年5月至2024年11月,数据来源于UWA网站(www.uwa4d.com)性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势作为参考。 2024年5月 - 2024年…

Spring Aop 中对JoinPoint的理解

以下是源码中对 JoinPoint 的描述 A runtime joinpoint is an event that occurs on a static joinpoint (i.e. a location in a program). For instance, an invocation is the runtime joinpoint on a method (static joinpoint). The static part of a given joinpoint can…

C中指针在64位操作系统下为什么是4而不是8

好久没写C了,今天用VScode想写个Demo,翻了下指针资料,想打印下指针大小,发现是4,但是理论上64位系统不应该是8么? 结论就是我编的是32位程序,编译器按照32位编译的。 用vscode的C 插件编译运行…

使用 pycharm 新建不使用 python 虚拟环境( venv、conda )的工程

有时候我们发现一个好玩的 demo,想赶快在电脑上 pip install 一下跑起来,发现因为 python 的 venv、conda 环境还挺费劲的,因为随着时间的发展,之前记得很清楚的 venv、conda 的用法,不经常使用,半天跑不起…

鸿蒙主流路由详解

鸿蒙主流路由详解 Navigation Navigation更适合于一次开发,多端部署,也是官方主流推荐的一种路由控制方式,但是,使用起来入侵耦合度高,所以,一般会使用HMRouter,这也是官方主流推荐的路由 Navigation官网地址 个人源码地址 路由跳转 第一步-定义路由栈 Provide(PageInfo) pag…

Flink Sink的使用

经过一系列Transformation转换操作后,最后一定要调用Sink操作,才会形成一个完整的DataFlow拓扑。只有调用了Sink操作,才会产生最终的计算结果,这些数据可以写入到的文件、输出到指定的网络端口、消息中间件、外部的文件系统或者是…

鸿蒙本地模拟器 模拟TCP服务端的过程

鸿蒙模拟器模拟TCP服务端的过程涉及几个关键步骤,主要包括创建TCPSocketServer实例、绑定IP地址和端口、监听连接请求、接收和发送数据以及处理连接事件。以下是详细的模拟过程: **1.创建TCPSocketServer实例:**首先,需要导入鸿蒙…

【VUE3】新版Vue3+ElementPlus全家桶开发视频项目实战

VUE 介绍 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。 Vue.js是一个MVVM(Model - View - ViewModel)的SPA框架。 Model:数…

Edify 3D: Scalable High-Quality 3D Asset Generation

Deep Imagination Research | NVIDIA 目录 一、Abstract 二、核心内容 1、多视图扩散模型 3、重建模型: 4、数据处理模块: 三、结果 1、文本到 3D 生成结果 2、图像到 3D 生成结果 3、四边形网格拓扑结构 一、Abstract NVIDIA 开发的用于高质量…

Python爬虫能处理动态加载的内容吗?

Python爬虫确实可以处理动态加载的内容。动态加载的内容通常是通过JavaScript在客户端执行,这意味着当网页首次加载时,服务器返回的HTML可能并不包含最终用户看到的内容。相反,JavaScript代码会在页面加载后从服务器请求额外的数据&#xff0…

JavaScript练习2——动态“钟”的绘制

实现效果: 分析需求: 1、需要每隔一定时间间隔执行一次绘图,实现旋转效果 2、需要绘制矩形框、圆形缺口框、文字 3、需要设置style 代码实现: 下面给出关键代码的实现,部分函数在之前的文章已经给出 https://blog.…

Jira使用笔记二 ScriptRunner 验证问题创建角色

背景 最近在对公司Jira工作流改造,收到这么一个要求:某些问题类型只有某些角色可以创建。本来是想通过Jira内建的权限控制来处理的。结果点到权限页面,心都凉透了。 好吧,那只能上脚本了。最终使用ScriptRunner的Simple scripte…

Java中的线程池使用详解

文章目录 Java中的线程池使用详解一、引言二、线程池的创建与使用1、线程池的创建1.1、FixedThreadPool(固定大小线程池)1.2、CachedThreadPool(可缓存线程池)1.3、SingleThreadExecutor(单线程化线程池)1.…

3D扫描对文博行业有哪些影响?

三维扫描技术对文博行业产生了深远的影响,主要体现在以下几个方面: 一、高精度建模与数字化保护 三维扫描技术通过高精度扫描设备,能够捕捉到文物的每一个细节,包括形状、纹理、颜色等,从而生成逼真的3D模型。这些模…

C# 泛型(Generic)

文章目录 前言一、泛型的基本概念与实例展示二、泛型的特性与优势三、泛型方法四、泛型委托 前言 泛型(Generic)允许将类或方法中编程元素的数据类型规范进行延迟编写,直到在程序实际使用这些类或方法的时候再去确定具体的数据类型。 一、泛…

前端小练习——星辰宇宙(JS没有上限!!!)

前言:在刚开始学习前端的时候,我们会学习到前端三件套中的JavaScript,可能那时候读者没有觉得JavaScript这个语言有多么的牛逼,本篇文章将会使用一个炫酷的案例来刷新你对JavaScript这个语言的认知与理解。 ✨✨✨这里是秋刀鱼不做…

【Python爬虫五十个小案例】爬取豆瓣电影Top250

博客主页:小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介:分享五十个Python爬虫小案例 🪲前言 在这篇博客中,我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用requests库来发送HTTP请求,…

多目标优化算法——多目标粒子群优化算法(MOPSO)

Handling Multiple Objectives With Particle Swarm Optimization(多目标粒子群优化算法) 一、摘要: 本文提出了一种将帕累托优势引入粒子群优化算法的方法,使该算法能够处理具有多个目标函数的问题。与目前其他将粒子群算法扩展…