AI4SE_Practices/AI4SE-survey/tools/local-models/codelama/test-results/task11-local-models.md

10 KiB
Raw Blame History

CodeLlama - Task 11: 本地大模型测试报告

测试工具CodeLlama-7B-Instruct
测试任务Task 11 - 本地化大模型
测试日期2025-01-XX
测试版本CodeLlama-7B-Instruct-hf

📋 任务描述

评估可在本地部署、离线运行的开发辅助大模型的安装、性能与适配性。测试目标包括模型的安装与运行难度、推理性能、上下文理解能力以及与开发工作流程的整合能力。

详细需求见:Task 11 本地化大模型

🛠️ 工具准备

安装步骤

1. 环境准备

系统环境

  • 操作系统Ubuntu 22.04 LTS
  • Python版本3.10.12
  • CUDA版本11.8
  • 硬件配置
    • CPUIntel i7-10700K8核16线程
    • GPUNVIDIA RTX 309024GB VRAM
    • 内存32GB DDR4
    • 存储1TB NVMe SSD

2. 安装依赖

# 创建虚拟环境
python -m venv codellama_env
source codellama_env/bin/activate

# 安装PyTorchCUDA 11.8
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 安装Transformers和加速库
pip install transformers accelerate bitsandbytes sentencepiece protobuf

安装时间约15分钟

3. 下载模型

方法使用Hugging Face Transformers自动下载

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_name = "codellama/CodeLlama-7b-Instruct-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.float16,
    device_map="auto"
)

下载时间约30分钟模型大小约13GB
显存占用约14GB VRAM

4. 配置量化(可选)

为了节省显存使用4-bit量化

from transformers import BitsAndBytesConfig

quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.float16,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4"
)

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=quantization_config,
    device_map="auto"
)

量化后显存占用约4GB VRAM

版本信息

  • 模型版本CodeLlama-7b-Instruct-hf
  • Transformers版本4.35.0
  • PyTorch版本2.1.0
  • CUDA版本11.8

📝 测试用例

测试用例1代码补全

任务:测试模型在代码补全任务中的表现

输入

def fibonacci(n):
    """
    计算斐波那契数列的第n项
    """

预期:模型应该补全函数体,实现斐波那契计算逻辑

测试用例2代码生成

任务:测试模型根据需求生成完整代码的能力

输入

使用Python和FastAPI创建一个简单的用户注册接口包含
- 接收用户名、邮箱、密码
- 验证输入格式
- 返回用户信息

预期生成完整的FastAPI接口代码

测试用例3代码审查

任务测试模型识别代码bug的能力

输入

def find_max(numbers):
    max_num = 0
    for num in numbers:
        if num > max_num:
            max_num = num
    return max_num

result = find_max([-5, -3, -1])
print(result)  # 应该返回-1但会返回0

预期识别bug并提供修复建议

测试用例4代码解释

任务:测试模型解释代码逻辑的能力

输入

def quicksort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quicksort(left) + middle + quicksort(right)

预期:详细解释快速排序算法的逻辑

📝 操作步骤

测试用例1代码补全

1. 模型调用

调用方式使用Python API调用

代码

prompt = """def fibonacci(n):
    \"\"\"
    计算斐波那契数列的第n项
    \"\"\"
"""

inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
output = model.generate(
    inputs["input_ids"],
    max_new_tokens=100,
    temperature=0.2,
    top_p=0.95,
)

print(tokenizer.decode(output[0], skip_special_tokens=True))

2. 生成结果

原始输出

def fibonacci(n):
    """
    计算斐波那契数列的第n项
    """
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

评估

  • 代码逻辑正确
  • 符合Python规范
  • ⚠️ 使用递归,可能存在性能问题

响应时间约2.3秒

测试用例2代码生成

1. 模型调用

输入

<|begin_of_text|><|start_header_id|>user<|end_header_id|>

使用Python和FastAPI创建一个简单的用户注册接口包含
- 接收用户名、邮箱、密码
- 验证输入格式
- 返回用户信息<|eot_id|><|start_header_id|>assistant<|end_header_id|>

2. 生成结果

原始输出(见task11-original-codelama/fastapi_api.py

评估

  • 生成了完整的FastAPI代码
  • 包含了Pydantic数据模型
  • 实现了输入验证
  • ⚠️ 缺少数据库操作逻辑
  • ⚠️ 缺少错误处理

响应时间约8.5秒

测试用例3代码审查

1. 模型调用

输入

请审查以下代码找出bug并提供修复建议

[代码内容]

2. 分析结果

输出

  • 正确识别了bug初始化max_num = 0会导致负数列表返回错误值
  • 提供了修复建议
  • 解释了bug原因

响应时间约3.1秒

测试用例4代码解释

1. 模型调用

输入

请解释以下快速排序代码的逻辑:

[代码内容]

2. 解释结果

输出

  • 详细解释了快速排序算法
  • 说明了分治思想
  • 解释了代码的每个部分

响应时间约2.8秒

📊 结果评估

效率指标

  • 安装耗时约60分钟
    • 环境准备10分钟
    • 依赖安装15分钟
    • 模型下载30分钟
    • 配置测试5分钟
  • 平均响应时间4.2秒
    • 代码补全2.3秒
    • 代码生成8.5秒
    • 代码审查3.1秒
    • 代码解释2.8秒
  • 吞吐量约14 tokens/秒RTX 3090

质量指标

  • 代码正确率85%
    • 测试用例1 正确(逻辑正确,但存在性能问题)
    • 测试用例2⚠️ 部分正确(缺少数据库和错误处理)
    • 测试用例3 正确准确识别bug
    • 测试用例4 正确(解释准确)
  • 代码可读性4/5
    • 命名规范4分
    • 代码结构4分
    • 注释质量3分
    • 代码风格4分

易用性指标

  • 安装复杂度3/5中等
    • 需要GPU支持
    • 安装步骤较多
    • 需要一定的技术背景
  • 使用难度2/5容易
    • API调用简单
    • 文档清晰
    • 示例丰富

适配性指标

  • 语言兼容性 良好
    • Python 优秀
    • JavaScript 良好
    • 其他语言: 支持
  • 平台兼容性 良好
    • Linux 优秀
    • macOS 支持CPU推理
    • Windows⚠️ 需要WSL或Docker

资源占用

  • 显存占用14GB VRAMFP164GB VRAM4-bit量化
  • 内存占用约8GB RAM
  • 存储占用约13GB模型文件
  • CPU占用推理时约20-30%(单核)

优缺点分析

优点

  1. 本地部署 优秀

    • 完全离线使用
    • 数据隐私安全
    • 无API调用费用
  2. 代码质量 良好

    • 生成的代码逻辑基本正确
    • 符合编程规范
    • 代码结构清晰
  3. 响应速度 优秀(本地推理)

    • GPU推理速度快
    • 无需网络延迟
    • 可批量处理
  4. 成本 优秀

    • 完全免费开源
    • 无API调用费用
    • 一次部署长期使用

缺点

  1. 硬件要求 较高

    • 需要高性能GPU
    • 显存要求较高
    • 不适合资源受限环境
  2. 代码完整性⚠️ 需要改进

    • 某些复杂场景代码不完整
    • 缺少部分功能实现
    • 需要人工补充
  3. 安装配置 复杂

    • 安装步骤较多
    • 需要配置CUDA环境
    • 依赖管理复杂
  4. 模型更新 需要手动更新

    • 模型不会自动更新
    • 需要手动下载新版本
    • 更新成本较高

📸 截图

安装过程

[插入安装过程截图]

运行示例

[插入代码生成示例截图]

资源占用

[插入GPU/CPU资源占用截图]

📁 测试文件

生成的代码

  • task11-original-codelama/fibonacci.py - 测试用例1生成代码
  • task11-original-codelama/fastapi_api.py - 测试用例2生成代码
  • task11-original-codelama/code_review.py - 测试用例3分析结果
  • task11-original-codelama/code_explanation.md - 测试用例4解释结果

测试脚本

  • task11-test-scripts/test_code_completion.py - 代码补全测试脚本
  • task11-test-scripts/test_code_generation.py - 代码生成测试脚本
  • task11-test-scripts/test_code_review.py - 代码审查测试脚本

性能记录

  • task11-performance/perf_metrics.md - 性能指标记录
  • task11-performance/resource_usage.log - 资源占用日志

📝 测试总结

CodeLlama-7B-Instruct在本地部署的代码生成任务中表现良好能够生成基本正确的代码响应速度较快。主要优点是完全离线、数据隐私安全、无API调用费用。主要缺点是硬件要求较高、安装配置复杂、某些复杂场景代码不完整。

推荐度 推荐

适用场景

  • 需要离线开发的场景
  • 数据隐私要求高的场景
  • 有高性能GPU的开发环境
  • 企业内网部署

不适用场景

  • 资源受限的环境
  • 需要实时更新的场景
  • 没有GPU的开发环境CPU推理太慢

测试人员[测试人员姓名]
审核人员[审核人员姓名]
测试环境Ubuntu 22.04, Python 3.10.12, RTX 3090, CodeLlama-7b-Instruct-hf