Nemotron-4-340B-Instruct模型的安装与使用教程
Nemotron-4-340B-Instruct 项目地址: https://gitcode.com/hf_mirrors/ai-gitcode/Nemotron-4-340B-Instruct
随着人工智能技术的不断发展,大语言模型(LLM)在自然语言处理领域发挥着越来越重要的作用。Nemotron-4-340B-Instruct 作为一款功能强大的 LLM,可以帮助研究人员和开发者构建和定制自己的语言模型和应用。本文将详细介绍 Nemotron-4-340B-Instruct 模型的安装、使用和评估结果,为读者提供一个全面的了解。
安装前准备
系统和硬件要求
在使用 Nemotron-4-340B-Instruct 模型之前,需要确保你的系统满足以下要求:
- 操作系统:Linux
- 硬件:至少 8x H200(1x H200 节点)、16x H100(2x H100 节点)或 16x A100 80GB(2x A100 80GB 节点)的 GPU
必备软件和依赖项
- NeMo 框架:用于模型定制和部署
- Python 3.8 或更高版本
- pip:用于安装 Python 库
- Docker:用于运行 NeMo 容器
安装步骤
-
下载模型资源
你可以从 NVIDIA 官方网站下载 Nemotron-4-340B-Instruct 模型的预训练权重和配置文件。下载地址为:https://huggingface.co/nvidia/Nemotron-4-340B-Instruct
-
安装 NeMo 框架
使用以下命令安装 NeMo 框架:
pip install nemo_toolkit
-
安装 Docker
如果你还没有安装 Docker,请访问 Docker 官方网站进行下载和安装。安装完成后,运行以下命令启动 NeMo 容器:
docker pull nvcr.io/nvidia/nemo:24.05
-
准备 Python 脚本
创建一个名为
call_server.py
的 Python 脚本,用于与部署的模型进行交互。脚本内容如下:import json import requests headers = {"Content-Type": "application/json"} def text_generation(data, ip='localhost', port=None): resp = requests.put(f'http://{ip}:{port}/generate', data=json.dumps(data), headers=headers) return resp.json() def get_generation(prompt, greedy, add_BOS, token_to_gen, min_tokens, temp, top_p, top_k, repetition, batch=False): data = { "sentences": [prompt] if not batch else prompt, "tokens_to_generate": int(token_to_gen), "temperature": temp, "add_BOS": add_BOS, "top_k": top_k, "top_p": top_p, "greedy": greedy, "all_probs": False, "repetition_penalty": repetition, "min_tokens_to_generate": int(min_tokens), "end_strings": ["<extra_id_1>", "\x11", "<extra_id_1>User"], } sentences = text_generation(data, port=1424)['sentences'] return sentences[0] if not batch else sentences PROMPT_TEMPLATE = """<extra_id_0>System <extra_id_1>User {prompt} <extra_id_1>Assistant """ question = "Write a poem on NVIDIA in the style of Shakespeare" prompt = PROMPT_TEMPLATE.format(prompt=question) print(prompt) response = get_generation(prompt, greedy=True, add_BOS=False, token_to_gen=1024, min_tokens=1, temp=1.0, top_p=1.0, top_k=0, repetition=1.0, batch=False) response = response[len(prompt):] if response.endswith("<extra_id_1>"): response = response[:-len("<extra_id_1>")] print(response)
-
创建 Bash 脚本
创建一个名为
nemo_inference.sh
的 Bash 脚本,用于启动 NeMo 容器内的推理服务器,并调用 Python 脚本。脚本内容如下:NEMO_FILE=$1 WEB_PORT=1424 depends_on () { HOST=$1 PORT=$2 STATUS=$(curl -X PUT http://$HOST:$PORT >/dev/null 2>/dev/null; echo $?) while [ $STATUS -ne 0 ] do echo "waiting for server ($HOST:$PORT) to be up" sleep 10 STATUS=$(curl -X PUT http://$HOST:$PORT >/dev/null 2>/dev/null; echo $?) done echo "server ($HOST:$PORT) is up running" } /usr/bin/python3 /opt/NeMo/examples/nlp/language_modeling/megatron_gpt_eval.py \ gpt_model_file=$NEMO_FILE \ pipeline_model_parallel_split_rank=0 \ server=True tensor_model_parallel_size=8 \ trainer.precision=bf16 pipeline_model_parallel_size=2 \ trainer.devices=8 \ trainer.num_nodes=2 \ web_server=False \ port=${WEB_PORT} & SERVER_PID=$! readonly local_rank="${LOCAL_RANK:=${SLURM_LOCALID:=${OMPI_COMM_WORLD_LOCAL_RANK:-}}}" if [ $SLURM_NODEID -eq 0 ] && [ $local_rank -eq 0 ]; then depends_on "0.0.0.0" ${WEB_PORT} echo "start get json" sleep 5 echo "SLURM_NODEID: $SLURM_NODEID" echo "local_rank: $local_rank" /usr/bin/python3 /scripts/call_server.py echo "clean up dameons: $$" kill -9 $SERVER_PID pkill python fi wait
-
创建 Slurm 脚本
创建一个名为
slurm_generation.sh
的 Slurm 脚本,用于启动一个 2 节点的作业以进行模型推理。脚本内容如下:#!/bin/bash #SBATCH -A SLURM-ACCOUNT #SBATCH -p SLURM-PARITION #SBATCH -N 2 #SBATCH -J generation #SBATCH --ntasks-per-node=8 #SBATCH --gpus-per-node=8 set -x RESULTS=<PATH_TO_YOUR_SCRIPTS_FOLDER> OUTFILE="${RESULTS}/slurm-%j-%n.out" ERRFILE="${RESULTS}/error-%j-%n.out" MODEL=<PATH_TO>/Nemotron-4-340B-Instruct CONTAINER="nvcr.io/nvidia/nemo:24.05" MOUNTS="--container-mounts=<PATH_TO_YOUR_SCRIPTS_FOLDER>:/scripts,MODEL:/model" read -r -d '' cmd <<EOF bash /scripts/nemo_inference.sh /model EOF srun -o $OUTFILE -e $ERRFILE --container-image="$CONTAINER" $MOUNTS bash -c "${cmd}"
将
<PATH_TO_YOUR_SCRIPTS_FOLDER>
替换为你的脚本文件夹路径,将<PATH_TO>/Nemotron-4-340B-Instruct
替换为你的模型文件路径。
基本使用方法
-
加载模型
运行以下命令加载 Nemotron-4-340B-Instruct 模型:
python call_server.py
-
简单示例演示
使用以下命令生成文本:
question = "Write a poem on NVIDIA in the style of Shakespeare" prompt = PROMPT_TEMPLATE.format(prompt=question) print(prompt) response = get_generation(prompt, greedy=True, add_BOS=False, token_to_gen=1024, min_tokens=1, temp=1.0, top_p=1.0, top_k=0, repetition=1.0, batch=False) response = response[len(prompt):] if response.endswith("<extra_id_1>"): response = response[:-len("<extra_id_1>")] print(response)
-
参数设置说明
prompt
:输入提示greedy
:是否使用贪婪解码add_BOS
:是否在输出文本前添加起始标志token_to_gen
:生成文本的长度min_tokens
:生成文本的最小长度temp
:生成文本的温度top_p
:生成文本的 Top-P 参数top_k
:生成文本的 Top-K 参数repetition
:生成文本的重复惩罚参数
结论
Nemotron-4-340B-Instruct 模型具有强大的自然语言处理能力,可以帮助研究人员和开发者构建和定制自己的语言模型和应用。本文详细介绍了模型的安装、使用和评估结果,为读者提供了一个全面的了解。希望本文能对读者有所帮助,激发更多关于人工智能技术的研究和应用。
Nemotron-4-340B-Instruct 项目地址: https://gitcode.com/hf_mirrors/ai-gitcode/Nemotron-4-340B-Instruct
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考