AI与大模型使用踩坑记录

AI与大模型使用踩坑记录

去年开始折腾AI大模型,从文本生成到图像生成,踩了不少坑。记录一下实战经验和心得。

国内主流大模型

模型 公司 特点
ChatGLM 智谱AI 中文优化,128K上下文
文心一言 百度 多模态,搜索整合
通义千问 阿里 开源,多尺寸
讯飞星火 科大讯飞 语音能力强
豆包 字节跳动 多场景应用
Kimi Moonshot 超长上下文

智谱清言GLM-4

GLM-4是智谱AI的最新模型,中文场景表现不错。

核心特性

  • 128K上下文窗口
  • 100%召回率(128K范围内)
  • 中文能力超越GPT-4约10%
  • 英文能力达到GPT-4约90%

API调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from openai import OpenAI

client = OpenAI(
api_key="your-api-key",
base_url="https://open.bigmodel.cn/api/paas/v4/"
)

response = client.chat.completions.create(
model="glm-4",
messages=[
{"role": "system", "content": "你是一个有用的助手"},
{"role": "user", "content": "你好"}
]
)

print(response.choices[0].message.content)

召回率是什么

召回率 = 检索到的相关信息数 / 相关信息总数

比如文档里有10个关键事实,模型正确找出9个,召回率就是90%。GLM-4在128K范围内号称100%召回率,也就是能找到文档里的任何信息。

模型下载

魔搭社区(ModelScope)

国内下载模型最方便的方式。

1
2
3
4
5
# 安装ModelScope
pip install modelscope

# 下载ChatGLM3
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b-32k.git

Python SDK下载:

1
2
3
4
from modelscope import snapshot_download

model_dir = snapshot_download("ZhipuAI/chatglm3-6b-32k")
print(f"Model downloaded to: {model_dir}")

Hugging Face镜像

国内访问HF受限,用镜像:

1
2
3
4
5
6
7
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'

from transformers import AutoModel, AutoTokenizer

model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)

Stable Diffusion与AI绘图

绘世启动器(SD-WebUI)

国产整合包,开箱即用。

下载:https://www.bilibili.com/read/cv31254871/

目录结构:

1
2
3
4
5
SD-WebUI/
├── models/ # 模型文件
├── extensions/ # 插件
├── outputs/ # 输出目录
└── webui-user.bat # 启动脚本

启动:双击webui-user.bat,浏览器访问http://localhost:7860

显存要求

显存 推荐模型 分辨率
4GB SD 1.5 + 优化 512x512
6GB SD 1.5/2.1 512x512-768x768
8GB SDXL 1024x1024
12GB+ SDXL + ControlNet 1024x1024+

虚拟内存配置

AI绘图吃内存,可能需要配置虚拟内存。

Windows配置:

  1. 右键”此电脑” -> 属性
  2. 高级系统设置 -> 性能设置 -> 高级 -> 虚拟内存更改
  3. 取消”自动管理”
  4. 设置自定义大小:
    • 初始大小:61440 MB (60GB)
    • 最大值:81920 MB (80GB)
  5. 点击设置,确定

注意:部分用户需要60GB以上虚拟内存才能跑SDXL。

LoRA模型训练

LoRA是高效的模型微调技术,消费级显卡就能训练。

硬件要求

配置 最低 推荐
显卡 GTX 1060 6GB RTX 3060 12GB+
内存 16GB 32GB+
存储 50GB SSD 100GB+ SSD

环境准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. Python 3.10
# 2. 创建虚拟环境
python -m venv lora-env

# 3. 激活
# Windows:
lora-env\Scripts\activate
# Linux/Mac:
source lora-env/bin/activate

# 4. 安装依赖
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install diffusers transformers accelerate
pip install bitsandbytes xformers

数据准备

数据集结构:

1
2
3
4
5
6
7
8
Dataset/
├── 1_girl/ # 触发词_类别
│ ├── 0001.png
│ ├── 0001.txt # 标注文件
│ ├── 0002.png
│ └── 0002.txt
└── 2_style/
└── ...

标注文件格式:

1
1girl, solo, long hair, red eyes, school uniform, looking at viewer

打标工具:

工具 特点
WD 1.4 Tagger 自动打标,准确率高
BooruDatasetTagManager 可视化编辑
Dataset Tag Editor 批量编辑,WebUI插件

训练参数

参数 说明 推荐值
batch_size 批次大小 2-4
learning_rate 学习率 1e-4 - 1e-3
steps 训练步数 1000-5000
network_dim 网络维度 32-128
network_alpha Alpha值 通常dim的一半
resolution 训练分辨率 512/768/1024

训练命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
accelerate launch --num_cpu_threads_per_process=2 train_network.py \
--pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5" \
--train_data_dir="./Dataset" \
--output_dir="./output" \
--network_dim=64 \
--network_alpha=32 \
--resolution=512 \
--train_batch_size=2 \
--learning_rate=1e-4 \
--max_train_steps=2000 \
--save_every_n_steps=500 \
--optimizer_type="AdamW8bit" \
--xformers \
--mixed_precision="fp16"

训练视频教程:https://www.bilibili.com/video/BV1fs4y1x7p2/

API调用优化

重试机制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import time
from functools import wraps

def retry_on_error(max_retries=3, delay=1):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
for i in range(max_retries):
try:
return func(*args, **kwargs)
except Exception as e:
if i == max_retries - 1:
raise
print(f"Retry {i+1}/{max_retries}: {e}")
time.sleep(delay * (i + 1))
return None
return wrapper
return decorator

@retry_on_error(max_retries=3)
def call_ai_api(prompt):
response = client.chat.completions.create(
model="glm-4",
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
max_tokens=2000
)
return response.choices[0].message.content

提示工程技巧

结构化提示:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 角色定义
你是专业的技术文档工程师。

# 任务描述
请将以下代码转换为Markdown格式的教程。

# 输入
{code}

# 输出要求
1. 使用中文
2. 包含代码块
3. 添加必要的注释说明

上下文管理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 使用系统消息设定上下文
messages = [
{"role": "system", "content": "你是一个精通Python的编程助手。"},
{"role": "user", "content": "请解释什么是装饰器"}
]

# 保持对话上下文
conversation_history = []

def chat(message):
conversation_history.append({"role": "user", "content": message})
response = client.chat.completions.create(
model="glm-4",
messages=conversation_history
)
reply = response.choices[0].message.content
conversation_history.append({"role": "assistant", "content": reply})
return reply

成本控制

模型 输入价格 输出价格
GLM-4 ¥0.01/1K tokens ¥0.01/1K tokens
GLM-4-Air ¥0.001/1K tokens ¥0.001/1K tokens
GPT-3.5 $0.0015/1K tokens $0.002/1K tokens

优化建议:

  1. 缓存响应,重复问题直接返回
  2. 压缩输入,移除不必要的上下文
  3. 根据任务选择性价比最高的模型
  4. 使用流式输出减少等待时间

资源汇总

模型下载平台

平台 网址 特点
魔搭社区 modelscope.cn 国内最方便
Hugging Face huggingface.co 全球最大
Civitai civitai.com 图像模型丰富
百度飞桨 paddlepaddle.org.cn 中文资源丰富

开发工具

工具 用途
Ollama 本地运行大模型
LM Studio 本地模型管理
ComfyUI 可视化AI绘图
Automatic1111 Stable Diffusion WebUI

AI大模型发展太快,每天都有新东西。建议:

  1. 先从API调用开始,了解大模型能做什么
  2. 有条件的话本地部署试试,感受下硬件门槛
  3. LoRA训练需要一定显存,量力而行
  4. 成本控制很重要,尤其是商用场景
  5. 提示工程是个技术活,多练多试

有问题的欢迎留言讨论。