MetaLlama大模型

霍格沃兹测试开发学社發表於2024-09-02

llama 大模型介紹

我們介紹 LLaMA,這是一個基礎語言模型的集合,引數範圍從 7B 到 65B。我們在數萬億個Token上訓練我們的模型,並表明可以專門使用公開可用的資料集來訓練最先進的模型,而無需訴諸專有的和無法訪問的資料集。特別是,LLaMA-13B 在大多數基準測試中都優於 GPT-3 (175B),

llama2 大模型介紹

我們開發併發布了 Llama 2,這是一組經過預訓練和微調的大型語言模型 (LLM),其引數規模從 70 億到 700 億不等。我們經過微調的大語言模型(稱為 Llama 2-Chat)針對對話用例進行了最佳化。我們的模型在我們測試的大多數基準上都優於開源聊天模型,並且根據我們對有用性和安全性的人工評估,可能是閉源模型的合適替代品

相關網址

  • https://ai.meta.com/llama/
  • https://github.com/facebookresearch/llama
  • https://huggingface.co/meta-llama/Llama-2-7b
  • https://huggingface.co/docs/transformers/model_doc/llama

llama 大語言模型提供的主要模型列表

Code Llama 模型

Code Llama 是一個基於 Llama 2 的大型程式碼語言模型系列,在開放模型、填充功能、對大輸入上下文的支援以及程式設計任務的零樣本指令跟蹤能力中提供最先進的效能。我們提供多種風格來覆蓋廣泛的應用程式:基礎模型 (Code Llama)、Python 專業化 (Code Llama - Python) 和指令跟隨模型 (Code Llama - Instruct),每個模型都有 7B、13B 和 34B 引數。所有模型均在 16k 個標記序列上進行訓練,並在最多 100k 個標記的輸入上顯示出改進。7B 和 13B Code Llama 和 Code Llama - 指令變體支援基於周圍內容的填充。Code Llama 是透過使用更高的程式碼取樣對 Llama 2 進行微調而開發的。與 Llama 2 一樣,我們對模型的微調版本應用了大量的安全緩解措施。有關模型訓練、架構和引數、評估、負責任的人工智慧和安全性的詳細資訊,請參閱我們的研究論文。Llama 材料(包括 Code Llama)的程式碼生成功能生成的輸出可能受第三方許可的約束,包括但不限於開源許可。

Code Llama 提供的主要模型列表

Base Model Python Instruct
7B codellama/CodeLlama-7b-hf codellama/CodeLlama-7b-Python-hf codellama/CodeLlama-7b-Instruct-hf
13B codellama/CodeLlama-13b-hf codellama/CodeLlama-13b-Python-hf codellama/CodeLlama-13b-Instruct-hf
34B codellama/CodeLlama-34b-hf codellama/CodeLlama-34b-Python-hf codellama/CodeLlama-34b-Instruct-hf

申請模型

申請地址 https://ai.meta.com/resources/models-and-libraries/llama-downloads/

申請透過後,在 hugging face 上如果郵箱一致,會提示已經授權

使用模型

  • 使用官方的 Api
  • 使用第三方封裝 Api llama.cpp-python ollama
  • 使用 langchain
  • 使用 hugging face 的 transformers

llama

https://github.com/facebookresearch/llama

torchrun --nproc_per_node 1 example_text_completion.py \
    --ckpt_dir llama-2-7b/ \
    --tokenizer_path tokenizer.model \
    --max_seq_len 128 --max_batch_size 4

NCCL 錯誤

RuntimeError: Distributed package doesn't have NCCL built in

windows 和 mac 上基本跑不起來,因為 torchrun 依賴 NCCL

https://pytorch.org/docs/stable/distributed.html

llama.cpp

https://github.com/ggerganov/llama.cpp

Port of Facebook's LLaMA model in C/C++

因為很多同學受限於個人電腦的環境,沒法執行完整的 llama 模型。llama.cpp 提供了一個非常好的移植版本,可以降低電腦的硬體要求,方便個人電腦執行與測試。

下載

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

make

模型轉換

透過對模型進行轉化,可以降低資源消耗。

# obtain the original LLaMA model weights and place them in ./models
ls ./models
65B 30B 13B 7B tokenizer_checklist.chk tokenizer.model
  # [Optional] for models using BPE tokenizers
  ls ./models
  65B 30B 13B 7B vocab.json

# install Python dependencies
python3 -m pip install -r requirements.txt

# convert the 7B model to ggml FP16 format
python3 convert.py models/7B/

  # [Optional] for models using BPE tokenizers
  python convert.py models/7B/ --vocabtype bpe

# quantize the model to 4-bits (using q4_0 method)
./quantize ./models/7B/ggml-model-f16.gguf ./models/7B/ggml-model-q4_0.gguf q4_0

# update the gguf filetype to current if older version is unsupported by another application
./quantize ./models/7B/ggml-model-q4_0.gguf ./models/7B/ggml-model-q4_0-v2.gguf COPY


# run the inference
./main -m ./models/7B/ggml-model-q4_0.gguf -n 128

此步可以省略,直接下載別人轉換好的量化模型即可。

https://huggingface.co/TheBloke/Llama-2-7b-Chat-GGUF

執行

命令列互動模式

./main -m ./models/llama-2-7b.Q4_0.gguf -i   -n 256 --color

開啟 server 模式,訪問 http://127.0.0.1:8080/

./server -m ./models/llama-2-7b.Q4_0.gguf

llama-cpp-python

https://github.com/abetlen/llama-cpp-python

pip install llama-cpp-python

mac m1 上構建的時候需要加上特殊的引數


CMAKE_ARGS="-DLLAMA_METAL=on -DCMAKE_OSX_ARCHITECTURES=arm64" FORCE_CMAKE=1 pip install -U llama-cpp-python --no-cache-dir --force-reinstall

啟動 Api 模式

pip install llama-cpp-python[server]
python  -m llama_cpp.server --model models/llama-2-7b.Q4_0.gguf
python  -m llama_cpp.server --model models/llama-2-7b.Q4_0.gguf --n_gpu_layers 1

訪問 http://localhost:8000/docs 可以看到 api 的文件,與 openai 相容。

ollama

  • 官網 https://ollama.ai/
  • github https://github.com/jmorganca/ollama
  • docker https://ollama.ai/blog/ollama-is-now-available-as-an-official-docker-image
(base) hogwarts: ~ seveniruby$ ollama serve codellama:7b
2023/10/08 02:31:04 images.go:987: total blobs: 6
2023/10/08 02:31:04 images.go:994: total unused blobs removed: 0
2023/10/08 02:31:04 routes.go:535: Listening on 127.0.0.1:11434

api 文件 https://github.com/jmorganca/ollama/blob/main/docs/api.md

基於 langchain 使用 llama

使用 langchain 呼叫


def test_llama_cpp_local():
    """
    使用本地模型
    :return:
    """
    llm = Llama(model_path="/Users/seveniruby/projects/llama.cpp/models/llama-2-7b.Q4_0.gguf")
    output = llm("Q: 法國的首都在哪裡\n A: ", echo=True, max_tokens=6, temperature=0)
    debug(json.dumps(output, indent=2, ensure_ascii=False))

輸出

{
  "id": "cmpl-6d3e491e-716f-4e6c-b167-4f52e3f9786f",
  "object": "text_completion",
  "created": 1696709780,
  "model": "/Users/seveniruby/projects/llama.cpp/models/llama-2-7b.Q4_0.gguf",
  "choices": [
    {
      "text": "Q: 法國的首都在哪裡\n A: 巴黎。\n",
      "index": 0,
      "logprobs": null,
      "finish_reason": "length"
    }
  ],
  "usage": {
    "prompt_tokens": 18,
    "completion_tokens": 6,
    "total_tokens": 24
  }
}

使用 langchain 結合 api 服務


def test_llama_cpp_local():
    """
    使用本地模型
    :return:
    """
    llm = Llama(model_path="/Users/seveniruby/projects/llama.cpp/models/llama-2-7b.Q4_0.gguf")
    output = llm("Q: 法國的首都在哪裡\n A: ", echo=True, max_tokens=6, temperature=0)
    debug(json.dumps(output, indent=2, ensure_ascii=False))

基於 langchain 與 hugging face

def test_pipeline():
    pipe = pipeline(
        "text-generation",
        model="meta-llama/Llama-2-7b-hf",
        torch_dtype=torch.float16,
        device='mps',  # 按需改成你的cuda或者cpu
        revision='main',
    )
    debug(pipe)

debug(pipe('法國的首都在哪裡'))

相關文章