2024-08-12 | Dimitri Didmanidze
DCLM-7B:主要特性與功能
Apple 的最新貢獻,DCLM-7B(語言模型資料計算)基礎模型,作為 LLM 領域的一個值得注意的補充而脫穎而出。讓我們探討一下它的主要功能。
Decoder-only Transformer
DCLM-7B 模型採用了 decoder-only Transformer 架構,這種設計方式讓模型一次預測一個詞元,並將每次生成的詞元回饋到模型中,來生成下一個詞元。
這種架構經過優化,能夠生成連貫且符合語境的文本,非常適合用於各種自然語言處理任務。這也是目前最先進的模型(如 ChatGPT 和 GPT-4)所採用的架構,展示了它在理解和生成類似人類文本方面的高效性。
開源
DCLM-7B 型號可根據Apple 範例程式碼授權進行研究和開發。這種開源方法鼓勵人工智慧社群內的廣泛使用和協作。
透過使該模型易於使用,Apple 支援人工智慧的民主化,讓世界各地的研究人員和開發人員能夠在基本模型的基礎上進行試驗和建構。
70 億個參數
DCLM-7B模型擁有70億個參數,在效能和運算效率之間取得了平衡。
這種尺寸使得該模型可以在大多數高 RAM/VRAM 設備和雲端平台上運行,從而使其具有多功能性並可用於各種應用程式。大量的參數使模型能夠捕捉複雜的語言模式,從而增強其執行各種任務的能力。
在海量資料集上進行訓練
該模型已經在包含 2.5 兆個標記的廣泛資料集上進行了訓練,為處理各種語言任務提供了堅實的基礎。這使得 DCLM-7B 模型能夠理解並產生具有高度準確性和相關性的文字。此外,這使得該模型成為特定任務微調的良好選擇,因為它對英語有強大的基礎理解。
上下文視窗
基本 DCLM-7B 模型具有 2048 個標記的上下文窗口,這使其能夠處理相對較長的文字序列。儘管以今天的標準來看,這個數字相對較小,但蘋果也發布了帶有 8K 令牌上下文視窗的變體。
這種擴展的上下文視窗為處理較長的輸入提供了更大的靈活性,使該模型適合需要處理擴展文本或文檔的應用程序,例如檢索增強生成(RAG)。

DCLM-7B 入門
Apple 已使 DCLM-7B 型號與Hugging Face的transformers
程式庫相容,使其易於存取和使用。
您可以在Hugging Face上找到該模型的網頁,並查看GitHub 儲存庫以獲取更多詳細資訊。要使用和存取模型,我們需要安裝該transformers
庫:
pip install transformers
此外,我們還需要安裝open_lm
框架:
pip install git+https://github.com/mlfoundations/open_lm.git
全精度 DCLM-7B 車型相當大,約 27.5GB,需要大量 RAM 或 VRAM 才能運作。您將需要一台高階電腦或某種雲端環境。我將使用 Google Colab 的高級訂閱筆記型電腦,配備 50GB RAM 和 L4 GPU。
安裝了所有必要的庫後,我們就可以開始使用該模型了!
DCLM-7B:用法範例
例如,我將運行模型的 Huggingface 網頁上提供的基本範例。首先,我們導入所有必需的庫:
from open_lm.hf import *
from transformers import AutoTokenizer, AutoModelForCausalLM
然後,我們需要下載並初始化分詞器和模型(請注意,在本例中,我們在 CPU 上以全精度浮點數運行模型):
tokenizer = AutoTokenizer.from_pretrained("apple/DCLM-Baseline-7B")
model = AutoModelForCausalLM.from_pretrained("apple/DCLM-Baseline-7B")
最後,我們運行範例提示:
inputs = tokenizer(["Machine learning is"], return_tensors="pt")
gen_kwargs = {"max_new_tokens": 50, "top_p": 0.8, "temperature": 0.8, "do_sample": True, "repetition_penalty": 1.1}
output = model.generate(inputs['input_ids'], **gen_kwargs)
output = tokenizer.decode(output[0].tolist(), skip_special_tokens=True)
我得到以下輸出:
[Machine learning is not the solution to everything, it just enables you to solve a problem that otherwise would have been impossible. The biggest challenge for me as a manager of an AI team was to identify those problems where machine learning can really add value and be successful.]
進階使用與微調
微調 DCLM-7B 模型有助於根據特定任務進行定制,從而增強其在應用中的性能。不幸的是,Huggingface 的函式庫不支援 DCLM-7B 模型peft
,因此我們需要使用transformers
函式庫對其進行微調。
如果沒有LoRA這樣的工具,微調這麼大的模型需要大量資源,因為它基本上與從頭開始訓練它相同。因此,我將在這裡概述微調過程,而不會實際運行它來查看結果。
準備資料集
要下載和使用公開可用的資料集,我們將使用 Hugging Face 的datasets
庫。我們使用以下命令安裝它:
pip install datasets
安裝後,我們匯入並使用該load_dataset
函數,在本例中我將使用資料wikitext
集:
from datasets import load_dataset
dataset = load_dataset('wikitext', 'wikitext-2-raw-v1')
現在,我們需要對資料集進行標記:
def tokenize_function(examples):
return tokenizer(examples['text'], padding='max_length', truncation=True, max_length=512)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
現在,我們準備開始微調!
微調
為了進行微調,我們需要匯入並初始化對象TrainingArguments
,Trainer
然後執行該train()
函數。
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(
report_to = "none",
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5, # Controls how much to change the model weights during training
per_device_train_batch_size=2, # Number of samples per batch per device during training
per_device_eval_batch_size=2, # Number of samples per batch per device during evaluation
num_train_epochs=3, # Number of times the entire training dataset will be passed through the model
weight_decay=0.01, # Regularization technique to prevent overfitting
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets['train'],
eval_dataset=tokenized_datasets['test'],
data_collator=data_collator,
tokenizer=tokenizer,
)
trainer.train()
結論
總體而言,Apple 的 DCLM-7B 是開源語言模型領域的重要補充,為研究人員和開發人員提供了執行各種 NLP 任務的強大工具。
作為僅解碼器的 Transformer 模型,它針對文字生成進行了最佳化,提供連貫且上下文相關的輸出。該模型根據蘋果學術軟體授權協議提供,進一步鼓勵人工智慧社群的協作和創新。