在建構大型語言模型(LLM)的過程中,您需要針對多種干預措施反覆進行評估。每次對數據、架構或超參數的調整,以及每次規模的提升,都會讓您回到相同的循環:新增或重新配置基準測試,在每個新的模型檢查點上重新運行它們,記錄結果,並檢查在小實驗中有所幫助的改進是否在完整訓練運行中依然成立。

大多數評估工具並非為此而設計——它們要麼是為了在已完成的模型上運行既定基準測試,要麼是在沙盒中讓模型通過多步驟、使用工具的問題。它們無法跟上不斷變化的模型,也無法反映模型在特定真實世界條件下的行為。

我們上一個為了解決此評估挑戰的專案是 OLMES(開放語言模型評估標準),於2024年推出。它旨在讓 LLM 基準測試分數在不同版本之間更容易比較。過去,相同的模型在相同基準測試上的評分方式各異——例如提示詞格式和任務表述常因論文而異——導致關於哪個模型表現最佳的主張往往無法重現。

OLMES 將基準測試選擇固定在一個開放、有文件記錄的標準中,並成為評估我們從 Olmo 到 Tulu 等開放模型的基礎。

但模型的最終分數只是評估過程的一部分——這就是我們發布 olmo-eval 的原因,這是一個建立在 OLMES 之上並將其擴展到 LLM 開發其餘環節的新工作台。相較於 OLMES,olmo-eval 減少了實作新評估的工作量,在定義評估運行地點和方式上提供更大的彈性,並使將單個組件組合成更大工作流程變得更容易。

代理式和多輪評估被視為一流的使用案例,更強大的分析工具可幫助您判斷某項改進是否確實優於基準線,或者差異僅是雜訊。

效能變化 2.4 個百分點是否足以做出判斷?olmo-eval 在某些方面與 Harbor 重疊,Harbor 是一個用於在容器化沙盒環境中評估 AI 代理的開放框架。但這兩種工具的範圍不同。Harbor 主要用於運行和發布代理基準測試;olmo-eval 則是為模型開發的日常工作而建構——新增和配置基準測試、在檢查點之間運行它們,以及逐個提示詞分析結果,而不是單一的總體分數。

Harbor 以相同的方式運行所有內容——即在密封、可重現的容器內。由於容器可能耗費大量資源,olmo-eval 讓您可以選擇每個基準測試的運行方式。只需模型回答問題的基準測試可以直接運行,這樣更快更便宜;需要鎖定環境的基準測試——例如運行模型編寫的程式碼——則會獲得一個隔離的容器設定。輕量級路徑是預設選項,olmo-eval 僅在基準測試確實需要時才選擇重量級設定。

Harbor 新增基準測試的流程是為您計劃公開發布和分享的評估而設計,包含所需的額外驗證步驟。olmo-eval 則專為開發過程中的快速迭代而建構,新增基準測試的方式取決於其需求:對於基本評估,只需簡短定義,並可選擇讓模型在使用工具時進行評估;對於已有程式碼和程序的基準測試,則只需一個輕量級的包裝器,olmo-eval 即可按原樣運行它,並以相同格式報告結果以及其他基準測試分數。

Harbor 和 olmo-eval 都將基準測試與運行時策略(模型如何運行以產生答案)分開,這樣您可以在不重寫另一部分的情況下更改其中一個,但 olmo-eval 的設計具有更大的模組化。在 olmo-eval 中,被評估的模型、它能使用的工具、容器化環境以及任何輔助模型——例如作為評審的 LLM——都是可互換的組件。

您可以在多個測試框架中重複使用一個工具,或將一個評分模型插入一個基準測試而不會干擾其他基準測試,並輕鬆調整小設定(例如提示詞的確切措辭)。

Harbor 報告每個模型的總體分數。olmo-eval 也報告這些分數,每個分數都附帶標準誤差和最小可檢測效應(能可靠區分於雜訊的最小差異)。但更有用的視圖是將相同問題在兩個模型檢查點之間逐一比較,同時保持其他條件不變。這有助於您判斷總體平均值中的微小變化是否表示真實的改進,或者僅僅是雜訊。

如果您正在尋找... olmo-eval 提供

編寫多範例基準測試 Task 子類別,帶有 DataSource、指標和評分介面

包裝現有帶有自身執行器的代理式基準測試 ExternalEval 或 SandboxedExternalEval;基準測試保留其循環和評分,結果會進入 olmo-eval 的 schema

在固定基準測試下切換運行時 --harness 和 harness 預設;harness 包含提供者、工具、腳本、沙盒和輔助提供者

平行容器執行 帶有基於能力的路由、Docker 或 Modal 模式的平行執行器沙盒實例

可在任務和測試框架中重複使用的工具定義 帶有可選全域註冊表的 @tool 裝飾器

多輪執行循環 腳本,例如 openai_agents,按每個 harness 選擇,而非內建於任務定義中

olmo-eval 由四個組件組成,它們各自有用,但設計成協同工作,以收緊實驗性 LLM 開發循環:

任務/套件/測試框架抽象:將基準測試邏輯與運行時策略解耦。任務是您在 olmo-eval 中定義基準測試的方式——即評估的內容。套件將任務分組為一組您一起運行的集合,而測試框架則控制每個任務的運行方式。這種分離允許相同的任務作為標準基準線運行,或與工具和腳本一起運行,而無需更改其測量內容。

沙盒和能力路由層,包括非同步沙盒規劃器。這支援模型響應取決於其使用工具(例如編寫和運行程式碼或瀏覽網頁)所採取行動的評估。重點是評估模型的真實工具使用:當基準測試需要工具時,olmo-eval 會運行這些工具並將結果反饋給模型。

標準化的實驗 schema,以相同的結構化格式記錄每次運行、其配置和結果。這使得分組相關實驗、隨時間比較檢查點以及避免長期模型開發工作流程中經常累積的不一致性成為可能。

用於成對模型比較的結果檢視器:將兩個模型或檢查點逐個問題地排成一行,可以發現整體平均值可能隱藏的微小但真實的效能變化。

在大多數模型評估設定中,新增基準測試是一個龐大的整合專案。在 olmo-eval 中,所需的只是一個任務——任務定義了基準測試資料集、如何建立評估請求以及如何評分模型答案(所有程式碼均為 Python):

```python

from olmo_eval.common.formatters import ChatFormatter

from olmo_eval.common.metrics import AccuracyMetric

from olmo_eval.common.scorers import ExactMatchScorer

from olmo_eval.common.types import Instance, SamplingParams

from olmo_eval.data import DataLoader, DataSource

from olmo_eval.evals.tasks.common import Task, register, register_variant

@register("internal_freshqa")

class InternalFreshQA(Task):

data_source = DataSource(path="s3://evals/internal/freshqa.jsonl", split="test")

formatter = ChatFormatter()

sampling_params = SamplingParams(temperature=0.0)

metrics = (AccuracyMetric(scorer=ExactMatchScorer),)

@property

def instances(self):

loader = DataLoader()

for idx, doc in enumerate(loader.load(self.config.get_data_source())):

yield Instance(

question=doc["question"],

gold_answer=doc["answer"],

metadata={"id": doc.get("id", f"freshqa_{idx}")},

)

```

變體表示評估策略的變化,而無需重複基準測試:

```python

register_variant("internal_freshqa", "3shot", num_fewshot=3, fewshot_seed=1234)

register_variant("internal_freshqa", "zero", num_fewshot=0)

```

套件將基準測試分組為您一起運行的標準集合:

```python

from olmo_eval.evals.suites import Suite, register

register(Suite(

name="base_qa_few_shot",

tasks=(

"sciq:mc:3shot",

"arc_challenge:mc:3shot",

"internal_freshqa:mc:3shot",

),

))

```

由於運行時策略存在於測試框架中而非任務定義中,因此相同的基準測試可以輕鬆地在不同執行下重新運行,而不必依賴於生成的點軌跡是否僅看起來合理。

```bash

# Baseline

olmo-eval run -m my-instruct-checkpoint -t internal_freshqa:zero

# Same task, same scoring, search/tool runtime enabled

olmo-eval run -m my-instruct-checkpoint -t internal_freshqa:zero --harness search_agent

```

當評估是持續模型開發的一部分,而非一次性運行時,請使用 olmo-eval——當您需要在可重現的條件下,跨檢查點重複運行相同的基準測試,並在總體和逐個問題的層面比較改進時。

如果您經常問的問題是「這個檢查點與上一個有何不同,以及它究竟在哪裡改進或退步了?」,那麼這正是 olmo-eval 為之構建的工作流程。

可重現的評估應該與模型的建構方式同步,而不僅僅是它們完成後的評分方式。olmo-eval 將 OLMES 標準帶入活躍的模型開發中,我們將其開放發布,以便社群可以在此基礎上進行建構。