Nemotron-4-340B-Instruct模型的安装与使用教程

Nemotron-4-340B-Instruct模型的安装与使用教程

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 容器

安装步骤

  1. 下载模型资源

    你可以从 NVIDIA 官方网站下载 Nemotron-4-340B-Instruct 模型的预训练权重和配置文件。下载地址为:https://huggingface.co/nvidia/Nemotron-4-340B-Instruct

  2. 安装 NeMo 框架

    使用以下命令安装 NeMo 框架:

    pip install nemo_toolkit
    
  3. 安装 Docker

    如果你还没有安装 Docker,请访问 Docker 官方网站进行下载和安装。安装完成后,运行以下命令启动 NeMo 容器:

    docker pull nvcr.io/nvidia/nemo:24.05
    
  4. 准备 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)
    
  5. 创建 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
    
  6. 创建 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 替换为你的模型文件路径。

基本使用方法

  1. 加载模型

    运行以下命令加载 Nemotron-4-340B-Instruct 模型:

    python call_server.py
    
  2. 简单示例演示

    使用以下命令生成文本:

    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)
    
  3. 参数设置说明

    • 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 Nemotron-4-340B-Instruct 项目地址: https://gitcode.com/hf_mirrors/ai-gitcode/Nemotron-4-340B-Instruct

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

### 解决 AutoDL 平台访问 Huggingface 的问题 当遇到在 AutoDL 上无法访问 Huggingface 资源的情况时,可能的原因包括网络连接不稳定、防火墙设置以及特定平台的限制。以下是详细的解决方案: #### 1. 使用代理或镜像站点 如果由于地理位置或其他原因导致直接访问 `huggingface.co` 受限,可以通过配置 HTTP/HTTPS 代理来绕过这些限制[^2]。 ```bash export http_proxy=http://your.proxy.server:port export https_proxy=https://your.proxy.server:port ``` 对于某些情况,也可以考虑使用国内的镜像站点作为替代方案。 #### 2. 修改 DNS 设置 有时域名解析失败也会造成无法访问的问题。尝试更换DNS服务器至更稳定的服务提供商,比如 Google Public DNS 或 Cloudflare DNS[^3]。 ```bash sudo nano /etc/resolv.conf # 添加如下内容并保存文件 nameserver 8.8.8.8 nameserver 8.8.4.4 ``` #### 3. 利用本地缓存机制 为了减少对外部依赖,在开发环境中启用模型和数据集的本地缓存功能是一个不错的选择。这样即使后续再次加载相同资源也不必每次都进行完整的下载操作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "nvidia/Llama-3.1-Nemotron-70B-Instruct-HF" cache_dir = "./transformers_cache" model = AutoModelForCausalLM.from_pretrained( model_name, cache_dir=cache_dir, torch_dtype=torch.bfloat16, device_map="auto" ) tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=cache_dir) ``` #### 4. 配置环境变量 确保所有必要的环境变量都已正确定义,特别是认证有关的部分(如 API 密钥)。这有助于避免因权限不足而导致的请求被拒现象发生[^4]。 ```bash export HF_HOME=/path/to/hf_home export TRANSFORMERS_CACHE=$HF_HOME/cache ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贡田源Kathleen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值