华为云用户手册
-
Step3 启动容器镜像 启动容器镜像前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。启动容器命令如下。 container_work_dir="/home/ma-user/ws" # 容器内挂载的目录 work_dir="/home/ma-user/ws" # 宿主机挂载目录,存放了代码、数据、权重 container_name="${container_name}" # ${container_name}为启动的容器名称 image_name="${image_name}" # ${image_name}启动的镜像ID或name docker run -itd \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ --cpus 192 \ --memory 1000g \ --shm-size 32g \ --net=host \ -v ${work_dir}:${container_work_dir} \ --name ${container_name} \ $image_name \ /bin/bash 参数说明: --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如ascendspeed。 -v ${work_dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同。 容器不能挂载/home/ma-user目录,此目录为ma-user用户家目录。 driver及npu-smi需同时挂载至容器。 ${image_name} 为docker镜像的ID,在宿主机上可通过docker images查询得到。 通过容器名称进入容器中。 docker exec -it ${container_name} bash 启动容器时默认用户为ma-user用户。如果需要切换到root用户可以执行以下命令: sudo su source /home/ma-user/.bashrc 如果继续使用ma-user,在使用其他属组如root用户上传的数据和文件时,可能会存在权限不足的问题,因此需要执行如下命令统一文件属主。 sudo chown -R ma-user:ma-group ${container_work_dir} # ${container_work_dir}:/home/ma-user/ws 容器内挂载的目录 例如: sudo chown -R ma-user:ma-group /home/ma-user/ws 安装依赖包。 #进入scriptsscripts目录,xxx为包版本,请按照实际情况替换 cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/scripts #执行安装命令 pip install -r requirements.txt
-
操作流程 开始使用如下样例前,请务必按准备工作指导完成必要操作。 Step1 准备算法:在AI Gallery中订阅算法。 Step2 准备训练数据:准备训练数据。创建OBS桶和文件夹,并将训练数据上传到OBS中。 Step3 全量微调训练:对算法进行全量微调。 Step4 部署模型并推理预测:训练完成后,部署模型并进行推理预测。 Step5 清理资源:运行完成后,停止服务并删除OBS中的数据,避免不必要的资源浪费。
-
Step2 准备训练数据 ChatGLM-6B-finetune训练使用的是ADGEN数据集,可以从Tsinghua Cloud下载。下载数据集之后,请参考以下要求创建OBS桶中的文件夹,并上传数据到OBS桶中,用于后续的算法微调训练。 OBS文件夹目录要求如下: {chatglm-mindspore-ma} # OBS对象桶,用户可以自定义名称,例如:chatglm-mindspore-ma -{data} # OBS文件夹,用于存放训练输入数据,用户可以自定义名称,例如:data -{AdvertiseGen} # OBS文件夹,用于存放训练输入数据,用户可以自定义名称,例如:AdvertiseGen - train.json # 训练数据集 - dev.json # 评估数据集 -{OBS文件夹} #训练输出路径,用于存放训练生成的模型文件等,用户可以自定义名称,例如:output -{OBS文件夹} #作业日志路径,用于存放训练日志,用户可以自定义名称,例如:log 本文档中使用的是开源数据集,主要用于跑通流程和体验,客户的实际业务开展需要根据数据集格式要求匹配自己的业务数据来做精细的调参。
-
LoRA微调超参配置 本章节介绍LoRA微调训练前的超参配置,可以根据实际需要修改。 LoRA微调训练脚本lora-llama2-13b.sh,存放在AscendCloud-3rdLLM-6.3.902/llm_train/AscendSpeed/scripts/llama2/目录下。训练前,可以根据实际需要修改超参配置。 微调任务配置,操作同预训练配置类似,不同点为RUN_TYPE类型不同,以及输入输出路径的配置的不同。 表1 超参配置 参数 值 参数说明 DATA_PATH /home/ma-user/ws/datasets/alpaca-ft/llama2-13b/alpaca-ft 必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。 TOKENIZER_PATH /home/ma-user/ws/tokenizers/llama2-13b-hf 必填。tokenizer保存地址。 SAVE_PATH $PWD/ckpt 中间保存结果,包含训练日志。 SAVE_CKPT_PATH ${SAVE_PATH}/ckpt-llama2-13b-lora 必填。训练ckpt保存地址。 MODEL_PATH /home/ma-user/ws/weight/llama2-13b-ckpt 必填。加载的权重文件路径。取值二选一: (推荐)上一步LoRA微调权重转换章节中将HuggingFace格式转化为AscendSpeed格式的权重文件。 预训练完成后保存的权重文件,即预训练超参配置中的SAVE_CKPT_PATH值。如果使用此权重文件,需要将权重文件的名称改为release,将latest_checkpointed_iteration.txt的内容文件内容改为release,具体参考1和5.3-2。 MODEL_TYPE 13B 模型加载类型。 TRAIN_ITERS 2000 训练迭代周期。根据实际需要修改。 MBS 4 流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 非必填,默认值4。 GBS 64 训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长。建议值单机64,双机128。 TP 8 张量并行。 PP 1 流水线并行。 seq_length 4096 要处理的最大序列长度,默认值2048,建议改为4096。 RUN_TYPE lora 训练脚本类型:pretrain、sft、lora。此处填写lora,表示LoRA微调训练。 父主题: LoRA微调训练
-
预训练超参配置 本章节介绍预训练前的超参配置,可以根据实际需要修改。 预训练脚本pretrain-llama2-13b.sh,存放在AscendCloud-3rdLLM-6.3.902/llm_train/AscendSpeed/scripts/llama2目录下。训练前,可以根据实际需要修改超参配置。 表1 超参配置 参数 值 参数说明 DATA_PATH /home/ma-user/ws/datasets/alpaca/llama2-13B/alpaca_text_document 必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。 请根据实际规划修改。 TOKENIZER_PATH /home/ma-user/ws/tokenizers/llama2-13b-hf 必填。tokenizer保存地址。 SAVE_PATH $PWD/ckpt 中间保存结果,包含训练日志。 SAVE_CKPT_PATH ${SAVE_PATH}/ckpt-llama2-13b 必填。训练ckpt保存地址。 MODEL_TYPE 13B 模型加载类型,默认为13B。 TRAIN_ITERS 2000 训练迭代周期。根据实际需要修改。 MBS 4 流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 默认值4。 GBS 64 训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长,建议值单机64,双机128。 TP 8 张量并行。 PP 1 流水线并行。 lr 0.00015 学习率,非必填,默认值3.0e-4 RUN_TYPE pretrain 训练脚本类型:pretrain。 父主题: 预训练
-
Step1 修改预训练脚本 执行命令如下,进入AscendSpeed代码目录。 cd .. #退出当前目录 cd /home/ma-user/ws/AscendCloud-3rdLLM-6.3.902/llm_train/AscendSpeed/ #进入/home/ma-user/ws/AscendCloud-3rdLLM-6.3.902/llm_train/AscendSpeed/目录 执行如下命令修改Llama2-13b的SFT全参微调脚本sft-llama2-13b.sh。 vim scripts/llama2/sft-llama2-13b.sh 修改脚本内容,与预训练参数保持一致,不同点为RUN_TYPE类型不同,RUN_TYPE=sft;以及输入输出路径的配置的不同。 datasets_PATH #预处理后的数据地址:*注意:一般为数据地址/数据前缀名 TOKENIZER_PATH #tokeneizer地址 SAVE_PATH # 中间保存结果 包含日志 SAVE_CKPT_PATH #训练ckpt保存地址 MODEL_PATH #SFT全参微调权重加载地址 MASTER_ADDR=${1:-localhost} # 主节点的ip地址,默认为localhost,多机多卡训练时需指定主节点IP地址。 MASTER_PORT=12331 #任务运行端口号 NNODES=${2:-1} # 节点总数,默认为1 NODE_RANK=${3:-0} # 当前节点id,默认从0开始 MODEL_TYPE=13B #模型加载类型 TRAIN_ITERS=2000 #训练迭代周期 MBS=4 #流水线并行中一个micro batch所处理的样本量 GBS=64 #训练中所有机器一个step所处理的样本量,建议单机64,双机128。 TP=8 #张量并行 PP=1 #流水线并行 RUN_TYPE=sft #训练类型:pretrain、sft、loral,sft表示训练类型是SFT全参微调 修改完后,保存退出。 :wq
-
查看性能 训练性能主要通过训练日志中的2个指标查看,吞吐量和loss收敛情况。 吞吐量:日志里存在samples per second参数。samples per second*seq_lenth/总卡数得到tokens/s/p,seq_lenth取值在训练脚本中可以查看,本示例中为4096。单机8卡吞吐量一般为1650tokens/s/p;双机16卡吞吐量一般为1625tokens/s/p。 loss收敛情况:日志里存在lm loss参数 ,lm loss参数随着训练迭代周期持续性减小,并逐渐趋于稳定平缓。也可以使用可视化工具TrainingLogParser查看loss收敛情况,如图2所示。 单节点训练:训练过程中的loss直接打印在窗口上。 多节点训练:训练过程中的loss打印在最后一个节点上。 图2 Loss收敛情况
-
HuggingFace权重转换操作 下载Llama2-13b的预训练权重和词表文件,并上传到/home/ma-user/ws/tokenizers/llama2-13b-hf目录下。具体下载地址请参见表1。如果已下载,忽略此步骤。 创建权重转换后的输出目录/home/ma-user/ws/weight/llama2-13b-ckpt/。 cd /home/ma-user/ws/ #进入/home/ma-user/ws/目录 mkdir -p weight/llama2-13b-ckpt 进入代码目录/home/ma-user/ws/AscendCloud-3rdLLM-6.3.902/llm_train/AscendSpeed/,在代码目录中执行convert_weights_from_huggingface.py脚本。 export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/AscendCloud-3rdLLM-6.3.902/llm_train/AscendSpeed/ModelLink cd /home/ma-user/ws/AscendCloud-3rdLLM-6.3.902/llm_train/AscendSpeed/ModelLink # 权重格式转换 python tools/ckpt_convert/llama/convert_weights_from_huggingface.py \ --input-model-dir /home/ma-user/ws/tokenizers/llama2-13b-hf \ # 输入权重文件夹 --output-model-dir /home/ma-user/ws/weight/llama2-13b-ckpt \ #转换之后的权重输出路径 --tensor-model-parallel-size 8 \ #tp需要与训练脚本中的配置一样 --pipeline-model-parallel-size 1 \ # pp需要与训练脚本中的配置一样 --type 13B \ #模型类型(13B) --merge-mlp 权重转换完成后,在/home/ma-user/ws/weight/llama2-13b-ckpt目录下查看转换后的权重文件。 图1 转换后的权重文件
-
评测结果 默认情况下,评测结果会按照outputs/default/{timestamp}的目录结果保存到对应的测试工程。 单独的评测结果如下: outputs/default/20240124_155746 # 父目录 ├── configs │ └── 20240124_155746.py # 数据集的一些配置 ├── logs # 运行过程中的日志 │ ├── eval │ └── infer ├── predictions # 各个数据集的原始输入与推理结果 │ └── opencompass.models.vllm_api.VLLM_opencompass_baichuan_13b_npu ├── results # 各个数据集的分数 │ └── opencompass.models.vllm_api.VLLM_opencompass_baichuan_13b_npu └── summary # 评测结果总结 ├── summary_20240124_155746.csv └── summary_20240124_155746.txt
-
权重合并和转换介绍 模型训练完成后,训练的产物包括模型的权重、优化器状态、loss等信息。这些内容可用于断点续训、模型评测或推理任务等。 在进行模型评测或推理任务前,需要将训练后生成的多个权重文件合并,并转换成Huggingface格式的权重文件。 权重文件的合并转换操作都要求在训练的环境中进行。 预训练或增量预训练产生的权重文件的合并与转换操作,请参考多卡权重合并进行操作。 LoRA微调训练产生的权重文件的合并与转换操作,请参考LoRA权重合并进行操作。 父主题: 推理前的权重合并转换
-
增量预训练超参配置 本章节介绍增量预训练前的超参配置,可以根据实际需要修改。 增量预训练脚本sft-llama2-13b.sh,存放在AscendCloud-3rdLLM-6.3.902-xxx/6.3.902-Ascend/llm_train/AscendSpeed/scripts/llama2目录下。训练前,可以根据实际需要修改超参配置。 微调任务配置,操作同预训练配置类似,不同点为RUN_TYPE类型不同,以及输入输出路径的配置的不同。 表1 增量预训练超参配置 参数 值 参数说明 DATA_PATH ${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca/alpaca-ft 必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名, 不加文件类型后缀。 TOKENIZER_PATH ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf 必填。tokenizer保存地址。 SAVE_PATH $PWD/ckpt 中间保存结果,包含训练日志。 SAVE_CKPT_PATH ${SAVE_PATH}/ckpt-llama2-13b-sft 必填。训练ckpt保存地址。 MODEL_PATH ${MA_JOB_DIR}/6.3.902-Ascend/weight/llama2-13b-ckpt 必填。加载的权重文件路径。取值二选一: (推荐)上一步增量预训练权重转换章节中将HuggingFace格式转化为AscendSpeed格式的权重文件。 预训练完成后保存的权重文件,即预训练超参配置中的SAVE_CKPT_PATH值。 MASTER_ADDR=${1:-localhost} localhost 主节点IP地址,默认为localhost。 多机多卡训练时需指定主节点IP地址。 MODEL_TYPE 13B 模型加载类型。 TRAIN_ITERS 2000 训练迭代周期。根据实际需要修改。 MBS 4 流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 非必填,默认值4。 GBS 64 训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长。建议单机64,双机128。 TP 8 张量并行。 PP 1 流水线并行。 seq_length 4096 要处理的最大序列长度,默认值2048,建议改为4096。 RUN_TYPE sft 训练脚本类型:pretrain、sft、loral。此处填写sft,表示增量预训练。 父主题: 增量预训练
-
LoRA微调超参配置 本章节介绍LoRA微调训练前的超参配置,可以根据实际需要修改。 LoRA微调训练脚本lora-llama2-13b.sh,存放在AscendCloud-3rdLLM-6.3.902-xxx/6.3.902-Ascend/llm_train/AscendSpeed/scripts/llama2/目录下。训练前,可以根据实际需要修改超参配置。 微调任务配置,操作同预训练配置类似,不同点为RUN_TYPE类型不同,以及输入输出路径的配置的不同。 表1 超参配置 参数 值 参数说明 DATA_PATH ${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca-ft/alpaca-ft 必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。 TOKENIZER_PATH ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf 必填。tokenizer保存地址。 SAVE_PATH $PWD/ckpt 中间保存结果,包含训练日志。 SAVE_CKPT_PATH ${SAVE_PATH}/ckpt-llama2-13b-lora 必填。训练ckpt保存地址。 MODEL_PATH ${MA_JOB_DIR}/6.3.902-Ascend/weight/llama2-13b-ckpt 必填。加载的权重文件路径。取值二选一: (推荐)上一步LoRA微调权重转换章节中将HuggingFace格式转化为AscendSpeed格式的权重文件。 预训练完成后保存的权重文件,即预训练超参配置中的SAVE_CKPT_PATH值。 MODEL_TYPE 13B 模型加载类型。 TRAIN_ITERS 2000 训练迭代周期。根据实际需要修改。 MBS 4 流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 非必填,默认值4。 GBS 64 训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长。建议值单机64,双机128。 TP 8 张量并行。 PP 1 流水线并行。 seq_length 4096 要处理的最大序列长度,默认值2048,建议改为4096。 RUN_TYPE lora 训练脚本类型:pretrain、sft、lora。此处填写lora,表示LoRA微调训练。 父主题: LoRA微调训练
-
Step1 合并LoRA微调训练生成的权重文件 此步骤的目的是将LoRA微调训练时生成的SAVE_CKPT_PATH和MODEL_PATH权重文件合并在一起,形成完整的权重文件。SAVE_CKPT_PATH和MODEL_PATH的具体值参考LoRA微调超参配置。 编辑LoRA权重合并脚本文件merge_lora_llama2_ptd_13B.sh,并修改配置。该脚本存放在“${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/scripts/tools/lora”目录下。 把26-31行设置TP、PP、ORIGIN_CHECKPOINT_PATH、LORA_CHECKPOINT_PATH、VOCAB_FILE、MERGED_MODEL_SAVE_PATH移动至else外,同时设置: ORIGIN_CHECKPOINT_PATH=${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf:设置为LoRA微调超参配置章节中的MODEL_PATH值。 LORA_CHECKPOINT_PATH=${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ckpt/ckpt-llama2-13b-lora:设置为LoRA微调任务章节中的SAVE_CKPT_PATH值。 VOCAB_FILE=${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf:tokenizer文件路径。 MERGED_MODEL_SAVE_PATH=${MA_JOB_DIR}/6.3.902-Ascend/weight/llama2_13b_lora_merge/:输出合并后的权重路径。 TP=8:张量并行数,要与LORA微调时设置相同的参数。 PP=1:流水线并行数,要与LORA微调时设置相同的参数,单机建议值为1,双机建议为2。 设置执行命令。 sh scripts/tools/lora/merge_lora_llama2_ptd_13B.sh 并提交做作业。
-
Step2 将多个权重文件合并为一个文件并转换格式 此步骤的目的是将Step1 合并LoRA微调训练生成的权重文件中生成的多个权重文件进行合并,生成一个权重文件,并转换权重文件的格式为HuggingFace格式。 脚本convert_weights_to_huggingface.py包含了权重文件合并和转换操作,具体的脚本内容和参数解释如下。 该脚本的执行需要在${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/代码目录下进行。 python ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/scripts/tools/ckpt_convert/llama/convert_weights_to_huggingface.py \ --input-model-dir ${ASCNEDSPEED_CKPT_PATH} \ --output-model-dir ${MERGE_CKPT_PATH} \ --src-tensor-model-parallel-size ${TENSOR-MODEL-PARALLEL-SIZE} \ --src-pipeline-model-parallel-size ${PIPELINE-MODEL-PARALLEL-SIZE} \ --type ${TYPE} \ --org-huggingface-dir ${HUGGINFGFACE_DIR} \ --merge-mlp 参数说明: ${ASCNEDSPEED_CKPT_PATH}:训练生成的AscendSpeed格式权重目录,多机多卡场景下需要把多个节点上的权重文件都放到任意一个节点的这个目录下,需要指定到含有mp_rank_xxxxxxx的目录,一般为iter_xxxxx或release。 ${MERGE_CKPT_PATH}:合并后的权重路径。 ${TENSOR-MODEL-PARALLEL-SIZE}:原始模型的TP配置大小,取值来自训练中的配置,此处需要手动输入。 ${PIPELINE-MODEL-PARALLEL-SIZE}:原始模型的PP配置大小,取值来自训练中的配置,此处需要手动输入。 ${TYPE}:原始模型参数大小,支持参数配置: 7B、13B、70B,按实际模型要求设置。 ${HUGGINFGFACE_DIR}:可选,开源HuggingFace权重目录,用于将开源权重内的配置文件,复制到转换后权重的输出目录中。 下面提供一个convert_weights_to_huggingface.py脚本的实际样例,供参考。 python ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/scripts/tools/ckpt_convert/llama/convert_weights_to_huggingface.py \ --input-model-dir ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ckpt/ckpt-llama2-13b-lora/iter_xxxxxxx \ --output-model-dir ${MA_JOB_DIR}/6.3.902-Ascend/weight/ckpt-llama2-13b-lora-hf \ --src-tensor-model-parallel-size 8 \ --src-pipeline-model-parallel-size 1 \ --type 13B \ --org-huggingface-dir ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf \ --merge-mlp 日志中出现下列提示即表示合并转换完成。 Merging tp pp weight from path: {as_dir} ...... Merging weight complete!!! Converting weight to huggingface...... Converting weight to huggingface complete!!! Saving weight to path: {hf_dir} huggingface weight saved to: {hf_dir}/pytorch_model.bin Generating model index config...... model index config saved in: {hf_dir}/pytorch_model.bin.index.json Generating weight config file from: {org_hf_dir} config file copy from "{org_hf_dir}" complete!!! 转换完成后目录中的release文件夹内至少包含一个bin文件和一个bin.index.json文件,bin文件大小应和huggingface原始权重大小相似: {hf_dir} ├── pytorch_model.bin └── pytorch_model.bin.index.json 以下config文件需要指定org_huggingface_dir参数才会生成。 ├── config.json ├── generation_config.json ├── gitattributes.txt ├── LICENSE.txt ├── README.md ├── special_tokens_map.json ├── tokenizer_config.json ├── tokenizer.json ├── tokenizer.model ├── USE_POLICY.md
-
预训练超参配置 本章节介绍预训练前的超参配置,可以根据实际需要修改。 预训练脚本pretrain-llama2-13b.sh,存放在AscendCloud-3rdLLM-6.3.902-xxx/llm_train/AscendSpeed/scripts/llama2目录下。训练前,可以根据实际需要修改超参配置。 表1 超参配置 参数 值 参数说明 DATA_PATH ${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca/llama2-13B/alpaca_text_document 必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。 请根据实际规划修改。 TOKENIZER_PATH ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf 必填。tokenizer保存地址。 SAVE_PATH $PWD/ckpt 中间保存结果,包含训练日志。 SAVE_CKPT_PATH ${SAVE_PATH}/ckpt-llama2-13b 必填。训练ckpt保存地址。 MODEL_TYPE 13B 模型加载类型,默认为13B。 TRAIN_ITERS 2000 训练迭代周期。根据实际需要修改。 MBS 4 流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 默认值4。 GBS 64 训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长,建议值单机64,双机128。 TP 8 张量并行。 PP 1 流水线并行。 lr 0.00015 学习率,非必填,默认值3.0e-4 RUN_TYPE pretrain 训练脚本类型:pretrain。 父主题: 预训练
-
创建LoRA微调训练任务 在VS Code中修改“\6.3.902-Ascend\llm_train\AscendSpeed\scripts\llama2\lora-llama2-13b.sh”脚本,修改脚本内容如下: #!/bin/bash set -ex source /usr/local/Ascend/ascend-toolkit/set_env.sh # The number of parameters is not aligned export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib:/root/miniconda3/lib:$LD_LIBRARY_PATH # 以下环境变量和多机网络通信相关,可以在容器内使用ifconfig查看 export HCCL_CONNECT_TIMEOUT=3600 # 多机通信等待时间 export AZUREML_EXPERIMENT_ID=0 # 多机训练时,数据多机编译 export GLOO_SOCKET_IFNAME=${NCCL_SOCKET_IFNAME} # 多机之间使用gloo通信时需要指定网口名称, export TP_SOCKET_IFNAME=${NCCL_SOCKET_IFNAME} # 多机之间使用TP通信时需要指定网口名称 # 以下变量和性能优化相关 export HCCL_OP_BASE_FFTS_MODE_ENABLE=TRUE # FFTS开关 export COMBINED_ENABLE=1 # pytorch Tensor 非连续转连续 export MULTI_STREAM_MEMORY_REUSE=1 # Enable memory reuse in INF_NAN mode can reduce memory usage and achieve lossless performance # export INF_NAN_MODE_ENABLE=1 # 解决算子遇到inf和NAN问题 # model args export MODEL_TYPE=13B # learning rate args export LR=0.00001 export MIN_LR=0.000002 export TRAIN_ITERS=50 export LR_WARMUP_ITERS=2000 #训练周期 export MBS=4 export GBS=64 #训练中所有机器一个step所处理的样本量,建议单机64,双机128。 # data args PWD=`pwd` export DATASET_PATH=${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca-ft/alpaca-ft #训练数据输入路径,不加文件类型后缀 export TOKENIZER_PATH=${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf/ #TOKENIZER存放路径 export SAVE_PATH=$PWD/ckpt #训练过程文件保存路径,包括日志 export SAVE_CKPT_PATH=${SAVE_PATH}/ckpt-llama2-13b-loral #续训完成后的权重保存目录 export MODEL_PATH=${MA_JOB_DIR}/6.3.902-Ascend/weight/llama2-13b-ckpt #预训练后的模型生成路径,断点续训时必须要有此参数。 # megatron args export TP=8 export PP=1 export SEED=1234 export RUN_TYPE=lora #表示脚本运行类型是断点续训,表示训练类型是LoRA微调训练 bash $PWD/scripts/llama2/llama2.sh 在“\6.3.902-Ascend\llm_train\AscendSpeed”路径下创建“ckpt/ckpt-llama2-13B-loral”目录,并设置为输出目录。 在“\6.3.902-Ascend\datasets\alpaca-ft”目录挂载4.2.1中的输出目录。 图1 设置输出目录 设置“tokenizers/llama2-13b-hf”目录挂载权重目录“obs://standard-llama2-13b/llama-2-13b-chat-hf/”。设置“weight/llama2-13b-ckpt”目录挂载LoRA微调权重转换的输出路径。 图2 设置输出和挂载目录 设置启动命令。 cd ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ && bash ./scripts/llama2/lora-llama2-13b.sh 单击“提交作业”完成作业创建。 图3 提交作业
-
操作流程 图1 操作流程图 表1 操作任务流程说明 阶段 任务 说明 准备工作 准备资源 本教程案例是基于ModelArts Standard运行的,需要购买并开通ModelArts专属资源池和OBS桶。 准备数据 准备训练数据,可以用Alpaca数据集,也可以使用自己准备的数据集。 准备权重 准备分词器Tokenizer和推理代码。 准备代码 准备AscendSpeed训练代码。 准备镜像 准备训练和推理模型适用的容器镜像。 配置ModelArts IDE插件 本案例采用VS Code插件完成大语言模型预训练、微调以及权重的合并转化。 预训练 预训练 介绍如何进行预训练,包括训练数据处理、超参配置、训练任务、断点续训及性能查看。 微调训练 增量预训练 介绍如何进行增量预训练。 LoRA微调训练 介绍如何进行LoRA微调训练。 推理前的权重转换 (二选一) 训练权重合并及转换 推理前,需要将预训练或增量预训练产生的多个权重文件合并为一个,并转换为HuggingFace格式。 LoRA权重合并及转换 推理前,需要将LoRA微调训练产生的多个权重文件合并为一个,并转换为HuggingFace格式。 推理部署 部署推理服务 介绍如何部署并启动推理服务。 推理性能测试 介绍如何验证推理性能,包括静态和动态benchmark。 推理精度测试 介绍如何测试推理精度,并获取评测结果。
-
查看性能 训练性能主要通过训练日志中的2个指标查看,吞吐量和loss收敛情况。 吞吐量:日志里存在samples per second参数。samples per second*seq_lenth/总卡数得到tokens/s/p,seq_lenth取值在训练脚本中可以查看,本示例中为4096。单机8卡吞吐量一般为1650tokens/s/p,双机16卡吞吐量一般为1625tokens/s/p。 loss收敛情况:日志里存在lm loss参数 ,lm loss参数随着训练迭代周期持续性减小,并逐渐趋于稳定平缓。也可以使用可视化工具TrainingLogParser查看loss收敛情况,如图3所示。 单节点训练:训练过程中的loss直接打印在窗口上。 多节点训练:训练过程中的loss打印在最后一个节点上。 图3 Loss收敛情况
-
Step3 查看精度测试结果 默认情况下,评测结果会按照result/{service_name}/{eval_dataset}-{timestamp} 的目录结果保存到对应的测试工程。执行多少次,则会在{service_name}下生成多少次结果。 单独的评测结果如下: {eval_dataset}-{timestamp} # 例如: mmlu-20240205093257 ├── accuracy │ ├── evaluation_accuracy.xlsx # 测试的评分结果,包含各个学科数据集的评分和总和评分。 ├── infer_info │ ├── xxx1.csv # 单个数据集的评测结果 │ ├── ...... │ ├── xxxn.csv # 单个数据集的评测结果 ├── summary_result │ ├── answer_correct.xlsx # 回答正确的结果 │ ├── answer_error.xlsx # 保存回答了问题的选项,但是回答结果错误 │ ├── answer_result_unknow.xlsx # 保存未推理出结果的问题,例如超时、系统错误 │ ├── system_error.xlsx # 保存推理结果,但是可能答非所问,无法判断是否正确,需要人工判断进行纠偏。
-
LoRA微调权重转换 LoRA微调训练前,需要先把训练权重文件转换为AscendSpeed格式。 基于预训练或增量预训练生成的权重文件已经是AscendSpeed格式,进行LoRA微调训练时,不需要再单独做权重转换,可以跳过此章节。 基于原始HuggingFace权重进行LoRA微调训练时,需要将Huggingface格式权重转换为AscendSpeed格式。 LoRA微调训练和增量预训练使用的是同一个HuggingFace权重文件,转换为AscendSpeed格式后的结果也是通用的。如果在增量预训练任务中已经完成了HuggingFace权重转换操作,此处无需重复操作,可以直接使用增量预训练中的权重转换结果。如果前面没有执行HuggingFace权重转换任务,可以参考增量预训练权重转换章节完成。 父主题: LoRA微调训练
-
自定义数据 如果是用户自己准备的数据集,可以使用Ascendspeed代码仓中的转换工具将json格式数据集转换为训练中使用的.idx + .bin格式。 #示例: #1.将准备好的json格式数据集存放于6.3.902-Ascend/datasets/data目录下: data.json #2.修改转换脚本 python ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ModelLink/tools/preprocess_data.py \ --input ${MA_JOB_DIR}/6.3.902-Ascend/datasets/data/data.json \ #需要转换的数据集路径 --output-prefix ${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca/llama2-13B/alpaca \ #转换后存放的数据集路径 --tokenizer-type PretrainedFromHF \ --tokenizer-name-or-path ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf \ --tokenizer-not-use-fast \ --json-keys text #3.执行完成后在 datasets文件夹中可以得到 data_text_document.idx 与data_text_document.bin 两个文件
-
请求服务 使用命令测试推理服务是否正常启动。 curl -X POST http://127.0.0.1:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "baichuan-13b-chat", "messages": [ { "role": "user", "content": "你是谁?" } ], "max_tokens": 100, "top_k": -1, "top_p": 1, "temperature": 0, "ignore_eos": false, "stream": false }' 服务的API与vLLM官网相同:https://github.com/vllm-project/vllm。此处介绍关键参数。 表1 请求服务参数说明 参数 是否必选 默认值 参数类型 描述 model 是 - Str 模型名称,参数--served-model-name的值。 messages 是 - LIst 请求输入的问题。 max_tokens 否 16 Int 每个输出序列要生成的最大tokens数量。 top_k 否 -1 Int 控制要考虑的前几个tokens的数量的整数。设置为 -1 表示考虑所有tokens。 适当降低该值可以减少采样时间。 top_p 否 1.0 Float 控制要考虑的前几个tokens的累积概率的浮点数。必须在 (0, 1] 范围内。设置为 1 表示考虑所有toekns。 temperature 否 1.0 Float 控制采样的随机性的浮点数。较低的值使模型更加确定性,较高的值使模型更加随机。0表示贪婪采样。 stop 否 None None/Str/List 用于停止生成的字符串列表。返回的输出将不包含停止字符串。 例如:["你", "好"],生成文本时遇到"你"或者"好"将停止文本生成。 stop_token_ids 否 None List 用于停止生成的token列表。返回的输出将包含停止tokens,除非停止tokens是特殊tokens。 ignore_eos 否 False Bool 是否忽略EOS tokens并继续生成EOS tokens后的tokens。False表示不忽略。 presence_penalty 否 0.0 Float 基于生成文本中新tokens是否已出现来对其进行惩罚的浮点数。大于0的值鼓励模型使用新的tokens,小于0的值鼓励模型重复使用tokens。 取值范围为[-2, 2] frequency_penalty 否 0.0 Float 基于生成文本中新tokens的频率来对其进行惩罚的浮点数。大于0的值鼓励模型使用新的tokens,小于0的值鼓励模型重复使用tokens。 取值范围为[-2, 2] skip_special_tokens 否 True Bool 是否跳过输出中的特殊tokens。默认为True,表示跳过。 stream 否 False Bool 是否开启流式推理。默认为False,表示不开启流式推理。 查看返回是否符合预期
-
启动服务 启动OpenAI服务器服务,具体操作命令如下,可以根据参数说明修改配置。 export ATB_LAYER_INTERNAL_TENSOR_REUSE=1 python -m vllm.entrypoints.openai.api_server --model ${container_model_path} \ --max-num-seqs=256 \ --max-model-len=4096 \ --max-num-batched-tokens=4096 \ --dtype=float16 \ --tensor-parallel-size=1 \ --block-size=128 \ --host=${docker_ip} \ --port=8080 \ --gpu-memory-utilization=0.9 \ --trust-remote-code \ --served-model-name="baichuan-13b-chat" 具体参数说明如下: --model ${container_model_path}:模型地址,模型格式是HuggingFace的目录格式。即Step4 获取权重文件上传的HuggingFace权重文件存放目录。 --max-num-seqs:最大同时处理的请求数,超过后拒绝访问。 --max-model-len:推理时最大输入+最大输出tokens数量,输入超过该数量会直接返回。 --max-num-batched-tokens:prefill阶段,最多会使用多少token,必须大于或等于--max-model-len,推荐使用4096或8192。 --dtype:模型推理的数据类型,当前只支持float16。 --tensor-parallel-size:模型并行数,13B模型一般为1即可。 --block-size:PagedAttention的block大小,推荐设置为128。 --host=${docker_ip}:服务部署的IP,${docker_ip}替换为容器实际的IP地址。可以在宿主机上通过docker inspect 容器ID |grep IPAddress 命令查询。 --port:服务部署的端口,和Step4 启动容器镜像中设置的端口保持一致,否则不能在容器外访问推理服务。 --gpu-memory-utilization:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。 --trust-remote-code:是否相信远程代码,baichuan-13b必须增加此项。 --served-model-name:模型名称。
-
Step5 获取训练镜像 建议使用官方提供的镜像部署训练服务。 镜像地址{image_url}为: 西南-贵阳一: swr.cn-southwest-2.myhuaweicloud.com/llm_eimodelarts/llama_ascend_pytorch_2_1:0.0.1-standard swr.cn-southwest-2.myhuaweicloud.com/llm_eimodelarts/vllm-npu:0.0.1-standard
-
HuggingFace权重转换操作 下载Llama2-13b的预训练权重和词表文件,并上传到OBS桶对应目录下。具体下载地址请参见表1。如果已下载,忽略此步骤。 设置“tokenizers/llama2-13b-hf”目录挂载权重目录“obs://standard-llama2-13b/llama-2-13b-chat-hf/”。 图1 挂载权重目录 单击输出目录“weight/llama2-13b-ckpt/”右侧的“设为输出”完成OBS桶中文件夹的挂载。 图2 挂载OBS桶中文件夹 设置启动命令。 export PYTHONPATH=$PYTHONPATH:${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ModelLink/ && python ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ModelLink/tools/ckpt_convert/llama/convert_weights_from_huggingface.py --input-model-dir ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf --output-model-dir ${MA_JOB_DIR}/6.3.902-Ascend/weight/llama2-13b-ckpt --tensor-model-parallel-size 8 --pipeline-model-parallel-size 1 --type 13B --merge-mlp 单击“提交作业”完成作业创建。 待作业完成后,“设为输出”的挂载目录下查看转换后的权重文件。
-
Step1 获取推理代码 根据下表链接下载“ascendcloud-llmframework_6.3.902_*.tar.gz”解压获得ascend-vllm代码包,将文件夹中的vllm-dev文件夹上传至OBS中预训练权重合并及转换或LoRA微调权重合并及转换输出的模型同级目录下。 表1 准备代码 代码包名称 代码说明 下载地址 ascendcloud-llmframework_6.3.902_*.tar.gz Ascend-vllm插件 获取路径:Support网站。 说明: 如果没有下载权限,请您联系所在企业的华为方技术支持购买资源。 创建推理脚本run-vllm.sh,脚本内容如下: source /home/ma-user/.bashrc export ASCEND_RT_VISIBLE_DEVI CES =${ASCEND_RT_VISIBLE_DEVICES} export PYTHONPATH=$PYTHONPATH:/home/mind/model/vllm-dev cd /home/mind/model/vllm-dev/ python /home/mind/model/vllm-dev/vllm/entrypoints/api_server.py --model="${model_path}" --ssl-keyfile="/home/mind/model/key.pem" --ssl-certfile="/home/mind/model/cert.pem" --tensor-parallel-size 1 --gpu-memory-utilization 0.95 --max-model-len=4096 --trust-remote-code --dtype="float16" --host=0.0.0.0 --port=8080 并将推理脚本上传至OBS中预训练权重合并及转换或LoRA微调权重合并及转换输出的模型同级目录下。 参数说明: ${ASCEND_RT_VISIBLE_DEVICES} 使用的NPU卡,单卡设为0即可,4卡可设为:0,1,2,3。 ${model_path} 模型路径,填写为'/home/mind/model/权重文件夹名称',如:'home/mind/model/llama2-13b-sft-hf'。 --tensor-parallel-size并行卡数。 --hostname服务部署的IP,使用本机IP 0.0.0.0。 --port服务部署的端口。 推理启动脚本必须名为run_vllm.sh,不可修改其他名称。 hostname和port也必须分别是0.0.0.0和8080不可更改。 通过openssl创建ssl pem证书,并上传至OBS桶。 以预训练权重合并及转换为例,在转换后的模型目录“obs://standard-llama2-13b/code/outputs/job-name”上传上述文件后,结果如下: 图1 上传ssl pem证书
-
创建训练任务 在VS Code中修改“\6.3.902-Ascend\llm_train\AscendSpeed\scripts\llama2\sft-llama2-13b.sh”脚本,修改脚本内容如下: #!/bin/bash set -ex source /usr/local/Ascend/ascend-toolkit/set_env.sh # The number of parameters is not aligned export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib:/root/miniconda3/lib:$LD_LIBRARY_PATH # 以下环境变量和多机网络通信相关,可以在容器内使用ifconfig查看 export HCCL_CONNECT_TIMEOUT=3600 # 多机通信等待时间 export AZUREML_EXPERIMENT_ID=0 # 多机训练时,数据多机编译 export GLOO_SOCKET_IFNAME=${NCCL_SOCKET_IFNAME} # 多机之间使用gloo通信时需要指定网口名称, export TP_SOCKET_IFNAME=${NCCL_SOCKET_IFNAME} # 多机之间使用TP通信时需要指定网口名称 # 以下变量和性能优化相关 export HCCL_OP_BASE_FFTS_MODE_ENABLE=TRUE export COMBINED_ENABLE=1 export MULTI_STREAM_MEMORY_REUSE=1 # export INF_NAN_MODE_ENABLE=1 # model args export MODEL_TYPE=13B #模型加载类型 # learning rate args export LR=0.00001 export MIN_LR=0.000003 export TRAIN_ITERS=100 #训练迭代周期 export LR_WARMUP_ITERS=2000 export MBS=4 #流水线并行中一个micro batch所处理的样本量 export GBS=64 #训练中所有机器一个step所处理的样本量,建议单机64,双机128。 # data args PWD=`pwd` export DATASET_PATH=${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca-ft/alpaca-ft #预处理后的数据地址:*注意:一般为数据地址/数据前缀名 export TOKENIZER_PATH=${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf/ #tokeneizer地址 export SAVE_PATH=$PWD/ckpt #中间保存结果 包含日志 export SAVE_CKPT_PATH=${SAVE_PATH}/ckpt-llama2-13b-sft #训练ckpt保存地址 export MODEL_PATH=${MA_JOB_DIR}/6.3.902-Ascend/weight/llama2-13b-ckpt #增量预训练权重加载地址 # megatron args export TP=8 #张量并行 export PP=1 #流水线并行 export SEED=1234 export RUN_TYPE=sft #训练类型:pretrain、sft、loral,sft表示训练类型是增量预训练 bash $PWD/scripts/llama2/llama2.sh 在“\6.3.902-Ascend\llm_train\AscendSpeed”路径下创建“ckpt/ckpt-llama2-13B-sft”目录,并设置为输出目录。 在“\6.3.902-Ascend\datasets\alpaca-ft”目录挂载4.1.1中的输出目录。 设置“tokenizers/llama2-13b-hf”目录挂载权重目录“obs://standard-llama2-13b/llama-2-13b-chat-hf/”。设置“weight/llama2-13b-ckpt”目录挂载增量预训练权重转换的输出路径。 图1 设置输出和挂载目录 设置启动命令如下。 cd ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ && bash scripts/llama2/sft-llama2-13b.sh 单击“提交作业”完成作业创建。 图2 提交作业
-
自定义数据 用户也可以自行准备训练数据。数据要求如下: 使用标准的.json格式的数据,通过设置--json-key来指定需要参与训练的列。 请注意huggingface中的数据集具有如下this格式。可以使用–json-key标志更改数据集文本字段的名称,默认为text。在维基百科数据集中,它有四列,分别是id、url、title和text。可以指定–json-key标志来选择用于训练的列。 { 'id': '1', 'url': 'https://simple.wikipedia.org/wiki/April', 'title': 'April', 'text': 'April is the fourth month...' }
-
Alpaca数据 Alpaca是由OpenAI的text-davinci-003引擎生成的包含52k条指令和演示的数据集。这些指令数据可以用来对语言模型进行指令调优,使语言模型更好地遵循指令。 预训练数据集下载:https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet,数据大小:24M左右。 增量预训练、LoRA微调训练数据集下载: http://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json,数据大小:22M左右。
-
准备数据集 准备数据集,例如根据Alpaca数据部分给出的预训练数据集、增量预训练、LoRA微调训练数据集下载链接下载数据集。 参考OBS文档在准备OBS桶创建的桶下创建文件夹用以存放数据,例如在桶standard-llama2-13b中创建文件夹alpaca。 参考文档利用OBS-Browser-Plus工具将步骤1下载的数据集上传至步骤2创建的文件夹目录下。得到OBS下数据集结构: obs://standard-llama2-13b/alpaca/llama2-13B/ ├── alpaca_data.json ├── train-00000-of-00001-a09b74b3ef9c3b56.parquet
共100000条
- 1
- ...
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
- 1000
- 1001
- 1002
- 1003
- 1004
- 1005
- 1006
- 1007
- 1008
- 1009
- 1010
- 1011
- 1012
- 1013
- 1014
- 1015
- 1016
- 1017
- 1018
- 1019
- 1020
- 1021
- 1022
- 1023
- 1024
- 1025
- 1026
- 1027
- 1028
- 1029
- 1030
- 1031
- 1032
- 1033
- 1034
- 1035
- 1036
- 1037
- 1038
- 1039
- 1040
- 1041
- 1042
- 1043
- 1044
- 1045
- 1046
- 1047
- 1048
- 1049
- 1050
- 1051
- 1052
- 1053
- 1054
- 1055
- 1056
- 1057
- 1058
- 1059
- 1060
- 1061
- 1062
- 1063
- 1064
- 1065
- 1066
- 1067
- 1068
- 1069
- 1070
- 1071
- 1072
- 1073
- 1074
- 1075
- 1076
- 1077
- 1078
- 1079
- 1080
- 1081
- 1082
- 1083
- 1084
- 1085
- 1086
- 1087
- 1088
- 1089
- 1090
- 1091
- 1092
- 1093
- 1094
- 1095
- 1096
- 1097
- 1098
- 1099
- 1100
- 1101
- 1102
- 1103
- 1104
- 1105
- 1106
- 1107
- 1108
- 1109
- 1110
- 1111
- 1112
- 1113
- 1114
- 1115
- 1116
- 1117
- 1118
- 1119
- 1120
- 1121
- 1122
- 1123
- 1124
- 1125
- 1126
- 1127
- 1128
- 1129
- 1130
- 1131
- 1132
- 1133
- 1134
- 1135
- 1136
- 1137
- 1138
- 1139
- 1140
- 1141
- 1142
- 1143
- 1144
- 1145
- 1146
- 1147
- 1148
- 1149
- 1150
- 1151
- 1152
- 1153
- 1154
- 1155
- 1156
- 1157
- 1158
- 1159
- 1160
- 1161
- 1162
- 1163
- 1164
- 1165
- 1166
- 1167
- 1168
- 1169
- 1170
- 1171
- 1172
- 1173
- 1174
- 1175
- 1176
- 1177
- 1178
- 1179
- 1180
- 1181
- 1182
- 1183
- 1184
- 1185
- 1186
- 1187
- 1188
- 1189
- 1190
- 1191
- 1192
- 1193
- 1194
- 1195
- 1196
- 1197
- 1198
- 1199
- 1200
- 1201
- 1202
- 1203
- 1204
- 1205
- 1206
- 1207
- 1208
- 1209
- 1210
- 1211
- 1212
- 1213
- 1214
- 1215
- 1216
- 1217
- 1218
- 1219
- 1220
- 1221
- 1222
- 1223
- 1224
- 1225
- 1226
- 1227
- 1228
- 1229
- 1230
- 1231
- 1232
- 1233
- 1234
- 1235
- 1236
- 1237
- 1238
- 1239
- 1240
- 1241
- 1242
- 1243
- 1244
- 1245
- 1246
- 1247
- 1248
- 1249
- 1250
- 1251
- 1252
- 1253
- 1254
- 1255
- 1256
- 1257
- 1258
- 1259
- 1260
- 1261
- 1262
- 1263
- 1264
- 1265
- 1266
- 1267
- 1268
- 1269
- 1270
- 1271
- 1272
- 1273
- 1274
- 1275
- 1276
- 1277
- 1278
- 1279
- 1280
- 1281
- 1282
- 1283
- 1284
- 1285
- 1286
- 1287
- 1288
- 1289
- 1290
- 1291
- 1292
- 1293
- 1294
- 1295
- 1296
- 1297
- 1298
- 1299
- 1300
- 1301
- 1302
- 1303
- 1304
- 1305
- 1306
- 1307
- 1308
- 1309
- 1310
- 1311
- 1312
- 1313
- 1314
- 1315
- 1316
- 1317
- 1318
- 1319
- 1320
- 1321
- 1322
- 1323
- 1324
- 1325
- 1326
- 1327
- 1328
- 1329
- 1330
- 1331
- 1332
- 1333
- 1334
- 1335
- 1336
- 1337
- 1338
- 1339
- 1340
- 1341
- 1342
- 1343
- 1344
- 1345
- 1346
- 1347
- 1348
- 1349
- 1350
- 1351
- 1352
- 1353
- 1354
- 1355
- 1356
- 1357
- 1358
- 1359
- 1360
- 1361
- 1362
- 1363
- 1364
- 1365
- 1366
- 1367
- 1368
- 1369
- 1370
- 1371
- 1372
- 1373
- 1374
- 1375
- 1376
- 1377
- 1378
- 1379
- 1380
- 1381
- 1382
- 1383
- 1384
- 1385
- 1386
- 1387
- 1388
- 1389
- 1390
- 1391
- 1392
- 1393
- 1394
- 1395
- 1396
- 1397
- 1398
- 1399
- 1400
- 1401
- 1402
- 1403
- 1404
- 1405
- 1406
- 1407
- 1408
- 1409
- 1410
- 1411
- 1412
- 1413
- 1414
- 1415
- 1416
- 1417
- 1418
- 1419
- 1420
- 1421
- 1422
- 1423
- 1424
- 1425
- 1426
- 1427
- 1428
- 1429
- 1430
- 1431
- 1432
- 1433
- 1434
- 1435
- 1436
- 1437
- 1438
- 1439
- 1440
- 1441
- 1442
- 1443
- 1444
- 1445
- 1446
- 1447
- 1448
- 1449
- 1450
- 1451
- 1452
- 1453
- 1454
- 1455
- 1456
- 1457
- 1458
- 1459
- 1460
- 1461
- 1462
- 1463
- 1464
- 1465
- 1466
- 1467
- 1468
- 1469
- 1470
- 1471
- 1472
- 1473
- 1474
- 1475
- 1476
- 1477
- 1478
- 1479
- 1480
- 1481
- 1482
- 1483
- 1484
- 1485
- 1486
- 1487
- 1488
- 1489
- 1490
- 1491
- 1492
- 1493
- 1494
- 1495
- 1496
- 1497
- 1498
- 1499
- 1500
- 1501
- 1502
- 1503
- 1504
- 1505
- 1506
- 1507
- 1508
- 1509
- 1510
- 1511
- 1512
- 1513
- 1514
- 1515
- 1516
- 1517
- 1518
- 1519
- 1520
- 1521
- 1522
- 1523
- 1524
- 1525
- 1526
- 1527
- 1528
- 1529
- 1530
- 1531
- 1532
- 1533
- 1534
- 1535
- 1536
- 1537
- 1538
- 1539
- 1540
- 1541
- 1542
- 1543
- 1544
- 1545
- 1546
- 1547
- 1548
- 1549
- 1550
- 1551
- 1552
- 1553
- 1554
- 1555
- 1556
- 1557
- 1558
- 1559
- 1560
- 1561
- 1562
- 1563
- 1564
- 1565
- 1566
- 1567
- 1568
- 1569
- 1570
- 1571
- 1572
- 1573
- 1574
- 1575
- 1576
- 1577
- 1578
- 1579
- 1580
- 1581
- 1582
- 1583
- 1584
- 1585
- 1586
- 1587
- 1588
- 1589
- 1590
- 1591
- 1592
- 1593
- 1594
- 1595
- 1596
- 1597
- 1598
- 1599
- 1600
- 1601
- 1602
- 1603
- 1604
- 1605
- 1606
- 1607
- 1608
- 1609
- 1610
- 1611
- 1612
- 1613
- 1614
- 1615
- 1616
- 1617
- 1618
- 1619
- 1620
- 1621
- 1622
- 1623
- 1624
- 1625
- 1626
- 1627
- 1628
- 1629
- 1630
- 1631
- 1632
- 1633
- 1634
- 1635
- 1636
- 1637
- 1638
- 1639
- 1640
- 1641
- 1642
- 1643
- 1644
- 1645
- 1646
- 1647
- 1648
- 1649
- 1650
- 1651
- 1652
- 1653
- 1654
- 1655
- 1656
- 1657
- 1658
- 1659
- 1660
- 1661
- 1662
- 1663
- 1664
- 1665
- 1666
- 1667
- 1668
- 1669
- 1670
- 1671
- 1672
- 1673
- 1674
- 1675
- 1676
- 1677
- 1678
- 1679
- 1680
- 1681
- 1682
- 1683
- 1684
- 1685
- 1686
- 1687
- 1688
- 1689
- 1690
- 1691
- 1692
- 1693
- 1694
- 1695
- 1696
- 1697
- 1698
- 1699
- 1700
- 1701
- 1702
- 1703
- 1704
- 1705
- 1706
- 1707
- 1708
- 1709
- 1710
- 1711
- 1712
- 1713
- 1714
- 1715
- 1716
- 1717
- 1718
- 1719
- 1720
- 1721
- 1722
- 1723
- 1724
- 1725
- 1726
- 1727
- 1728
- 1729
- 1730
- 1731
- 1732
- 1733
- 1734
- 1735
- 1736
- 1737
- 1738
- 1739
- 1740
- 1741
- 1742
- 1743
- 1744
- 1745
- 1746
- 1747
- 1748
- 1749
- 1750
- 1751
- 1752
- 1753
- 1754
- 1755
- 1756
- 1757
- 1758
- 1759
- 1760
- 1761
- 1762
- 1763
- 1764
- 1765
- 1766
- 1767
- 1768
- 1769
- 1770
- 1771
- 1772
- 1773
- 1774
- 1775
- 1776
- 1777
- 1778
- 1779
- 1780
- 1781
- 1782
- 1783
- 1784
- 1785
- 1786
- 1787
- 1788
- 1789
- 1790
- 1791
- 1792
- 1793
- 1794
- 1795
- 1796
- 1797
- 1798
- 1799
- 1800
- 1801
- 1802
- 1803
- 1804
- 1805
- 1806
- 1807
- 1808
- 1809
- 1810
- 1811
- 1812
- 1813
- 1814
- 1815
- 1816
- 1817
- 1818
- 1819
- 1820
- 1821
- 1822
- 1823
- 1824
- 1825
- 1826
- 1827
- 1828
- 1829
- 1830
- 1831
- 1832
- 1833
- 1834
- 1835
- 1836
- 1837
- 1838
- 1839
- 1840
- 1841
- 1842
- 1843
- 1844
- 1845
- 1846
- 1847
- 1848
- 1849
- 1850
- 1851
- 1852
- 1853
- 1854
- 1855
- 1856
- 1857
- 1858
- 1859
- 1860
- 1861
- 1862
- 1863
- 1864
- 1865
- 1866
- 1867
- 1868
- 1869
- 1870
- 1871
- 1872
- 1873
- 1874
- 1875
- 1876
- 1877
- 1878
- 1879
- 1880
- 1881
- 1882
- 1883
- 1884
- 1885
- 1886
- 1887
- 1888
- 1889
- 1890
- 1891
- 1892
- 1893
- 1894
- 1895
- 1896
- 1897
- 1898
- 1899
- 1900
- 1901
- 1902
- 1903
- 1904
- 1905
- 1906
- 1907
- 1908
- 1909
- 1910
- 1911
- 1912
- 1913
- 1914
- 1915
- 1916
- 1917
- 1918
- 1919
- 1920
- 1921
- 1922
- 1923
- 1924
- 1925
- 1926
- 1927
- 1928
- 1929
- 1930
- 1931
- 1932
- 1933
- 1934
- 1935
- 1936
- 1937
- 1938
- 1939
- 1940
- 1941
- 1942
- 1943
- 1944
- 1945
- 1946
- 1947
- 1948
- 1949
- 1950
- 1951
- 1952
- 1953
- 1954
- 1955
- 1956
- 1957
- 1958
- 1959
- 1960
- 1961
- 1962
- 1963
- 1964
- 1965
- 1966
- 1967
- 1968
- 1969
- 1970
- 1971
- 1972
- 1973
- 1974
- 1975
- 1976
- 1977
- 1978
- 1979
- 1980
- 1981
- 1982
- 1983
- 1984
- 1985
- 1986
- 1987
- 1988
- 1989
- 1990
- 1991
- 1992
- 1993
- 1994
- 1995
- 1996
- 1997
- 1998
- 1999
- 2000
- 2001
- 2002
- 2003
- 2004
- 2005
- 2006
- 2007
- 2008
- 2009
- 2010
- 2011
- 2012
- 2013
- 2014
- 2015
- 2016
- 2017
- 2018
- 2019
- 2020
- 2021
- 2022
- 2023
- 2024
- 2025
- 2026
- 2027
- 2028
- 2029
- 2030
- 2031
- 2032
- 2033
- 2034
- 2035
- 2036
- 2037
- 2038
- 2039
- 2040
- 2041
- 2042
- 2043
- 2044
- 2045
- 2046
- 2047
- 2048
- 2049
- 2050
- 2051
- 2052
- 2053
- 2054
- 2055
- 2056
- 2057
- 2058
- 2059
- 2060
- 2061
- 2062
- 2063
- 2064
- 2065
- 2066
- 2067
- 2068
- 2069
- 2070
- 2071
- 2072
- 2073
- 2074
- 2075
- 2076
- 2077
- 2078
- 2079
- 2080
- 2081
- 2082
- 2083
- 2084
- 2085
- 2086
- 2087
- 2088
- 2089
- 2090
- 2091
- 2092
- 2093
- 2094
- 2095
- 2096
- 2097
- 2098
- 2099
- 2100
- 2101
- 2102
- 2103
- 2104
- 2105
- 2106
- 2107
- 2108
- 2109
- 2110
- 2111
- 2112
- 2113
- 2114
- 2115
- 2116
- 2117
- 2118
- 2119
- 2120
- 2121
- 2122
- 2123
- 2124
- 2125
- 2126
- 2127
- 2128
- 2129
- 2130
- 2131
- 2132
- 2133
- 2134
- 2135
- 2136
- 2137
- 2138
- 2139
- 2140
- 2141
- 2142
- 2143
- 2144
- 2145
- 2146
- 2147
- 2148
- 2149
- 2150
- 2151
- 2152
- 2153
- 2154
- 2155
- 2156
- 2157
- 2158
- 2159
- 2160
- 2161
- 2162
- 2163
- 2164
- 2165
- 2166
- 2167
- 2168
- 2169
- 2170
- 2171
- 2172
- 2173
- 2174
- 2175
- 2176
- 2177
- 2178
- 2179
- 2180
- 2181
- 2182
- 2183
- 2184
- 2185
- 2186
- 2187
- 2188
- 2189
- 2190
- 2191
- 2192
- 2193
- 2194
- 2195
- 2196
- 2197
- 2198
- 2199
- 2200
- 2201
- 2202
- 2203
- 2204
- 2205
- 2206
- 2207
- 2208
- 2209
- 2210
- 2211
- 2212
- 2213
- 2214
- 2215
- 2216
- 2217
- 2218
- 2219
- 2220
- 2221
- 2222
- 2223
- 2224
- 2225
- 2226
- 2227
- 2228
- 2229
- 2230
- 2231
- 2232
- 2233
- 2234
- 2235
- 2236
- 2237
- 2238
- 2239
- 2240
- 2241
- 2242
- 2243
- 2244
- 2245
- 2246
- 2247
- 2248
- 2249
- 2250
- 2251
- 2252
- 2253
- 2254
- 2255
- 2256
- 2257
- 2258
- 2259
- 2260
- 2261
- 2262
- 2263
- 2264
- 2265
- 2266
- 2267
- 2268
- 2269
- 2270
- 2271
- 2272
- 2273
- 2274
- 2275
- 2276
- 2277
- 2278
- 2279
- 2280
- 2281
- 2282
- 2283
- 2284
- 2285
- 2286
- 2287
- 2288
- 2289
- 2290
- 2291
- 2292
- 2293
- 2294
- 2295
- 2296
- 2297
- 2298
- 2299
- 2300
- 2301
- 2302
- 2303
- 2304
- 2305
- 2306
- 2307
- 2308
- 2309
- 2310
- 2311
- 2312
- 2313
- 2314
- 2315
- 2316
- 2317
- 2318
- 2319
- 2320
- 2321
- 2322
- 2323
- 2324
- 2325
- 2326
- 2327
- 2328
- 2329
- 2330
- 2331
- 2332
- 2333
- 2334
- 2335
- 2336
- 2337
- 2338
- 2339
- 2340
- 2341
- 2342
- 2343
- 2344
- 2345
- 2346
- 2347
- 2348
- 2349
- 2350
- 2351
- 2352
- 2353
- 2354
- 2355
- 2356
- 2357
- 2358
- 2359
- 2360
- 2361
- 2362
- 2363
- 2364
- 2365
- 2366
- 2367
- 2368
- 2369
- 2370
- 2371
- 2372
- 2373
- 2374
- 2375
- 2376
- 2377
- 2378
- 2379
- 2380
- 2381
- 2382
- 2383
- 2384
- 2385
- 2386
- 2387
- 2388
- 2389
- 2390
- 2391
- 2392
- 2393
- 2394
- 2395
- 2396
- 2397
- 2398
- 2399
- 2400
- 2401
- 2402
- 2403
- 2404
- 2405
- 2406
- 2407
- 2408
- 2409
- 2410
- 2411
- 2412
- 2413
- 2414
- 2415
- 2416
- 2417
- 2418
- 2419
- 2420
- 2421
- 2422
- 2423
- 2424
- 2425
- 2426
- 2427
- 2428
- 2429
- 2430
- 2431
- 2432
- 2433
- 2434
- 2435
- 2436
- 2437
- 2438
- 2439
- 2440
- 2441
- 2442
- 2443
- 2444
- 2445
- 2446
- 2447
- 2448
- 2449
- 2450
- 2451
- 2452
- 2453
- 2454
- 2455
- 2456
- 2457
- 2458
- 2459
- 2460
- 2461
- 2462
- 2463
- 2464
- 2465
- 2466
- 2467
- 2468
- 2469
- 2470
- 2471
- 2472
- 2473
- 2474
- 2475
- 2476
- 2477
- 2478
- 2479
- 2480
- 2481
- 2482
- 2483
- 2484
- 2485
- 2486
- 2487
- 2488
- 2489
- 2490
- 2491
- 2492
- 2493
- 2494
- 2495
- 2496
- 2497
- 2498
- 2499
- 2500
- 2501
- 2502
- 2503
- 2504
- 2505
- 2506
- 2507
- 2508
- 2509
- 2510
- 2511
- 2512
- 2513
- 2514
- 2515
- 2516
- 2517
- 2518
- 2519
- 2520
- 2521
- 2522
- 2523
- 2524
- 2525
- 2526
- 2527
- 2528
- 2529
- 2530
- 2531
- 2532
- 2533
- 2534
- 2535
- 2536
- 2537
- 2538
- 2539
- 2540
- 2541
- 2542
- 2543
- 2544
- 2545
- 2546
- 2547
- 2548
- 2549
- 2550
- 2551
- 2552
- 2553
- 2554
- 2555
- 2556
- 2557
- 2558
- 2559
- 2560
- 2561
- 2562
- 2563
- 2564
- 2565
- 2566
- 2567
- 2568
- 2569
- 2570
- 2571
- 2572
- 2573
- 2574
- 2575
- 2576
- 2577
- 2578
- 2579
- 2580
- 2581
- 2582
- 2583
- 2584
- 2585
- 2586
- 2587
- 2588
- 2589
- 2590
- 2591
- 2592
- 2593
- 2594
- 2595
- 2596
- 2597
- 2598
- 2599
- 2600
- 2601
- 2602
- 2603
- 2604
- 2605
- 2606
- 2607
- 2608
- 2609
- 2610
- 2611
- 2612
- 2613
- 2614
- 2615
- 2616
- 2617
- 2618
- 2619
- 2620
- 2621
- 2622
- 2623
- 2624
- 2625
- 2626
- 2627
- 2628
- 2629
- 2630
- 2631
- 2632
- 2633
- 2634
- 2635
- 2636
- 2637
- 2638
- 2639
- 2640
- 2641
- 2642
- 2643
- 2644
- 2645
- 2646
- 2647
- 2648
- 2649
- 2650
- 2651
- 2652
- 2653
- 2654
- 2655
- 2656
- 2657
- 2658
- 2659
- 2660
- 2661
- 2662
- 2663
- 2664
- 2665
- 2666
- 2667
- 2668
- 2669
- 2670
- 2671
- 2672
- 2673
- 2674
- 2675
- 2676
- 2677
- 2678
- 2679
- 2680
- 2681
- 2682
- 2683
- 2684
- 2685
- 2686
- 2687
- 2688
- 2689
- 2690
- 2691
- 2692
- 2693
- 2694
- 2695
- 2696
- 2697
- 2698
- 2699
- 2700
- 2701
- 2702
- 2703
- 2704
- 2705
- 2706
- 2707
- 2708
- 2709
- 2710
- 2711
- 2712
- 2713
- 2714
- 2715
- 2716
- 2717
- 2718
- 2719
- 2720
- 2721
- 2722
- 2723
- 2724
- 2725
- 2726
- 2727
- 2728
- 2729
- 2730
- 2731
- 2732
- 2733
- 2734
- 2735
- 2736
- 2737
- 2738
- 2739
- 2740
- 2741
- 2742
- 2743
- 2744
- 2745
- 2746
- 2747
- 2748
- 2749
- 2750
- 2751
- 2752
- 2753
- 2754
- 2755
- 2756
- 2757
- 2758
- 2759
- 2760
- 2761
- 2762
- 2763
- 2764
- 2765
- 2766
- 2767
- 2768
- 2769
- 2770
- 2771
- 2772
- 2773
- 2774
- 2775
- 2776
- 2777
- 2778
- 2779
- 2780
- 2781
- 2782
- 2783
- 2784
- 2785
- 2786
- 2787
- 2788
- 2789
- 2790
- 2791
- 2792
- 2793
- 2794
- 2795
- 2796
- 2797
- 2798
- 2799
- 2800
- 2801
- 2802
- 2803
- 2804
- 2805
- 2806
- 2807
- 2808
- 2809
- 2810
- 2811
- 2812
- 2813
- 2814
- 2815
- 2816
- 2817
- 2818
- 2819
- 2820
- 2821
- 2822
- 2823
- 2824
- 2825
- 2826
- 2827
- 2828
- 2829
- 2830
- 2831
- 2832
- 2833
- 2834
- 2835
- 2836
- 2837
- 2838
- 2839
- 2840
- 2841
- 2842
- 2843
- 2844
- 2845
- 2846
- 2847
- 2848
- 2849
- 2850
- 2851
- 2852
- 2853
- 2854
- 2855
- 2856
- 2857
- 2858
- 2859
- 2860
- 2861
- 2862
- 2863
- 2864
- 2865
- 2866
- 2867
- 2868
- 2869
- 2870
- 2871
- 2872
- 2873
- 2874
- 2875
- 2876
- 2877
- 2878
- 2879
- 2880
- 2881
- 2882
- 2883
- 2884
- 2885
- 2886
- 2887
- 2888
- 2889
- 2890
- 2891
- 2892
- 2893
- 2894
- 2895
- 2896
- 2897
- 2898
- 2899
- 2900
- 2901
- 2902
- 2903
- 2904
- 2905
- 2906
- 2907
- 2908
- 2909
- 2910
- 2911
- 2912
- 2913
- 2914
- 2915
- 2916
- 2917
- 2918
- 2919
- 2920
- 2921
- 2922
- 2923
- 2924
- 2925
- 2926
- 2927
- 2928
- 2929
- 2930
- 2931
- 2932
- 2933
- 2934
- 2935
- 2936
- 2937
- 2938
- 2939
- 2940
- 2941
- 2942
- 2943
- 2944
- 2945
- 2946
- 2947
- 2948
- 2949
- 2950
- 2951
- 2952
- 2953
- 2954
- 2955
- 2956
- 2957
- 2958
- 2959
- 2960
- 2961
- 2962
- 2963
- 2964
- 2965
- 2966
- 2967
- 2968
- 2969
- 2970
- 2971
- 2972
- 2973
- 2974
- 2975
- 2976
- 2977
- 2978
- 2979
- 2980
- 2981
- 2982
- 2983
- 2984
- 2985
- 2986
- 2987
- 2988
- 2989
- 2990
- 2991
- 2992
- 2993
- 2994
- 2995
- 2996
- 2997
- 2998
- 2999
- 3000
- 3001
- 3002
- 3003
- 3004
- 3005
- 3006
- 3007
- 3008
- 3009
- 3010
- 3011
- 3012
- 3013
- 3014
- 3015
- 3016
- 3017
- 3018
- 3019
- 3020
- 3021
- 3022
- 3023
- 3024
- 3025
- 3026
- 3027
- 3028
- 3029
- 3030
- 3031
- 3032
- 3033
- 3034
- 3035
- 3036
- 3037
- 3038
- 3039
- 3040
- ...
- 3041
- 3042
- 3043
- 3044
- 3045
- 3046
- 3047
- 3048
- 3049
- 3050
- 3051
- 3052
- 3053
- 3054
- 3055
- 3056
- 3057
- 3058
- 3059
- 3060
- 3061
- 3062
- 3063
- 3064
- 3065
- 3066
- 3067
- 3068
- 3069
- 3070
- 3071
- 3072
- 3073
- 3074
- 3075
- 3076
- 3077
- 3078
- 3079
- 3080
- 3081
- 3082
- 3083
- 3084
- 3085
- 3086
- 3087
- 3088
- 3089
- 3090
- 3091
- 3092
- 3093
- 3094
- 3095
- 3096
- 3097
- 3098
- 3099
- 3100
- 3101
- 3102
- 3103
- 3104
- 3105
- 3106
- 3107
- 3108
- 3109
- 3110
- 3111
- 3112
- 3113
- 3114
- 3115
- 3116
- 3117
- 3118
- 3119
- 3120
- 3121
- 3122
- 3123
- 3124
- 3125
- 3126
- 3127
- 3128
- 3129
- 3130
- 3131
- 3132
- 3133
- 3134
- 3135
- 3136
- 3137
- 3138
- 3139
- 3140
- 3141
- 3142
- 3143
- 3144
- 3145
- 3146
- 3147
- 3148
- 3149
- 3150
- 3151
- 3152
- 3153
- 3154
- 3155
- 3156
- 3157
- 3158
- 3159
- 3160
- 3161
- 3162
- 3163
- 3164
- 3165
- 3166
- 3167
- 3168
- 3169
- 3170
- 3171
- 3172
- 3173
- 3174
- 3175
- 3176
- 3177
- 3178
- 3179
- 3180
- 3181
- 3182
- 3183
- 3184
- 3185
- 3186
- 3187
- 3188
- 3189
- 3190
- 3191
- 3192
- 3193
- 3194
- 3195
- 3196
- 3197
- 3198
- 3199
- 3200
- 3201
- 3202
- 3203
- 3204
- 3205
- 3206
- 3207
- 3208
- 3209
- 3210
- 3211
- 3212
- 3213
- 3214
- 3215
- 3216
- 3217
- 3218
- 3219
- 3220
- 3221
- 3222
- 3223
- 3224
- 3225
- 3226
- 3227
- 3228
- 3229
- 3230
- 3231
- 3232
- 3233
- 3234
- 3235
- 3236
- 3237
- 3238
- 3239
- 3240
- 3241
- 3242
- 3243
- 3244
- 3245
- 3246
- 3247
- 3248
- 3249
- 3250
- 3251
- 3252
- 3253
- 3254
- 3255
- 3256
- 3257
- 3258
- 3259
- 3260
- 3261
- 3262
- 3263
- 3264
- 3265
- 3266
- 3267
- 3268
- 3269
- 3270
- 3271
- 3272
- 3273
- 3274
- 3275
- 3276
- 3277
- 3278
- 3279
- 3280
- 3281
- 3282
- 3283
- 3284
- 3285
- 3286
- 3287
- 3288
- 3289
- 3290
- 3291
- 3292
- 3293
- 3294
- 3295
- 3296
- 3297
- 3298
- 3299
- 3300
- 3301
- 3302
- 3303
- 3304
- 3305
- 3306
- 3307
- 3308
- 3309
- 3310
- 3311
- 3312
- 3313
- 3314
- 3315
- 3316
- 3317
- 3318
- 3319
- 3320
- 3321
- 3322
- 3323
- 3324
- 3325
- 3326
- 3327
- 3328
- 3329
- 3330
- 3331
- 3332
- 3333
- 3333
推荐文章