logo
0
0
WeChat Login

Multi-IaC-Eval: Diffusion LLM Evaluation

基于 Multi-IaC-Eval 论文的评估框架,用于测试扩散语言模型(LLaDA)在基础设施即代码(IaC)变更任务上的表现。

项目结构

IaC_dllm/
├── validate_setup.py      # 环境验证脚本
├── llada_generator.py     # LLaDA 生成器模块
├── llm_judge.py           # LLM 评判器
├── run_eval.py            # 简化版评估脚本
├── test_iac_dllm.py       # 完整评估脚本
├── test.csv               # 测试数据集
└── models/                # 模型文件目录
    ├── config.json
    ├── tokenizer.json
    ├── modeling_llada.py
    └── configuration_llada.py

脚本说明

1. validate_setup.py - 环境验证

验证运行环境是否正确配置,包括依赖包、模型文件和测试数据。

# 基本验证
python validate_setup.py

# 包含生成测试
python validate_setup.py --test-generation

检查项目:

  • Python 依赖(torch, transformers, Levenshtein, tqdm)
  • 模型文件完整性
  • 测试数据存在性
  • 模型加载与推理

2. llada_generator.py - LLaDA 生成器

实现 LLaDA(Large Language Diffusion with mAsking)的核心生成逻辑。

生成流程:

  1. 将输出序列初始化为全 mask tokens
  2. 迭代预测并根据置信度 unmask tokens
  3. 使用双向注意力(非因果)进行推理
from llada_generator import LLaDAGenerator

generator = LLaDAGenerator("./models", device="cuda")

# 生成 IaC 模板
template, num_calls = generator.generate_iac(
    initial_template="...",
    utterance="Add an S3 bucket",
    iac_type="cloudformation",
    max_new_tokens=512,
    num_steps=64,
    temperature=0.5
)

3. llm_judge.py - LLM 评判器

评估生成模板与期望模板的语义对齐程度。

评分标准(1-3 分):

  • 1 分:不对齐,未实现请求
  • 2 分:部分对齐,实现了部分请求
  • 3 分:完全对齐,正确实现请求
# 批量评估结果
python llm_judge.py \
    --results-file ./results/results_20240101_120000.jsonl \
    --output-file ./results/judge_results.json \
    --api-key YOUR_OPENAI_API_KEY

注意: 需要 OpenAI API Key。如无 API Key,将使用基于 Levenshtein 距离的规则评估作为 fallback。


4. run_eval.py - 简化版评估

快速运行评估,仅计算 Edit Distance 和 LLM Calls。

python run_eval.py \
    --model-path ./models \
    --test-data ./test.csv \
    --output-dir ./results \
    --max-samples 100 \
    --num-steps 32 \
    --temperature 0.5

5. test_iac_dllm.py - 完整评估脚本(推荐)

包含论文中所有评估指标的完整评估流程。

python test_iac_dllm.py \
    --model-path ./models \
    --test-data ./test.csv \
    --output-dir ./results \
    --iac-types cloudformation terraform \
    --num-diffusion-steps 64 \
    --temperature 0.5 \
    --max-retries 3

参数说明:

参数默认值说明
--model-path./models模型路径
--test-data./test.csv测试数据路径
--output-dir./results输出目录
--max-samplesNone最大样本数(调试用)
--iac-typescloudformation terraform评估的 IaC 类型
--num-diffusion-steps64扩散步数
--temperature0.5生成温度
--max-retries3失败重试次数
--no-retryFalse禁用重试机制

评估指标

指标说明计算方式
Lint Pass Rate语法检查通过率cfn-lint (CFN) / tflint (Terraform)
Checkov Pass Rate安全最佳实践通过率Checkov 扫描
Number of LLM Calls模型调用次数扩散步数 + 重试次数
LLM Judge Score语义对齐评分 (1-3)GPT-4 评判 / 规则 fallback
Edit Distance编辑距离Levenshtein 距离

环境配置

依赖安装

# Python 依赖
pip install torch transformers python-Levenshtein tqdm

# Lint 工具
pip install cfn-lint checkov

# tflint (macOS)
brew install tflint

# tflint (Linux)
curl -s https://raw.githubusercontent.com/terraform-linters/tflint/master/install_linux.sh | bash

模型文件

确保 ./models/ 目录包含以下文件:

  • config.json
  • tokenizer.json
  • modeling_llada.py
  • configuration_llada.py
  • 模型权重文件

快速开始

# 1. 验证环境
python validate_setup.py

# 2. 快速测试(10 个样本)
python test_iac_dllm.py --max-samples 10

# 3. 完整评估
python test_iac_dllm.py

# 4. LLM Judge 评分(可选)
export OPENAI_API_KEY=your_key
python llm_judge.py \
    --results-file ./results/results_*.jsonl \
    --output-file ./results/judge_results.json

输出示例

============================================================
EVALUATION SUMMARY
============================================================
Total samples: 1000

Overall Metrics:
  Lint Pass Rate: 78.50%
  Checkov Pass Rate: 92.30%
  Avg LLM Calls: 2.45
  Avg Edit Distance: 1024.32

CLOUDFORMATION Metrics (n=500):
  Lint Pass Rate: 72.11%
  Checkov Pass Rate: 89.91%
  Avg LLM Calls: 2.71
  Avg Edit Distance: 822

TERRAFORM Metrics (n=500):
  Lint Pass Rate: 84.80%
  Checkov Pass Rate: 100.00%
  Avg LLM Calls: 2.73
  Avg Edit Distance: 1343
============================================================

参考论文指标

FormatModelLint Pass RateCheckov Pass RateLLM CallsLLM JudgeEdit Distance
CFNLlama 3.2 11B72.11%89.91%2.711.89822
CFNDeepSeek R191.99%92.58%1.792.06733
CFNSonnet 3.5 V298.52%98.81%1.822.231190
TerraformLlama 3.2 11B84.80%100%2.732.011343
TerraformDeepSeek R198.83%98.83%1.812.121061
TerraformSonnet 3.5 V2100%100%2.12.391403

注意事项

  1. 扩散模型 vs 自回归模型:LLaDA 使用 mask-and-denoise 方式生成,与表格中的自回归模型(Llama、DeepSeek、Sonnet)机制不同

  2. LLM Calls 含义差异

    • 自回归模型:通常指 retry 次数
    • 扩散模型:指扩散步数
  3. transformers 版本兼容性:如遇到 all_tied_weights_keys 错误,需要在 modeling_llada.py 中添加该属性

License

MIT

About

dllm for IaC

Language
Python96.5%
Dockerfile3.5%