InternLM 书生大模型实战营

1. 入门岛

1.1 第一关 Linux 基础知识

闯关任务 完成SSH连接与端口映射并运行hello_world.py

hello_world运行截图:

运行hello_world.py

访问截图:

访问hello_world.py

可选任务2 使用 VSCODE 远程连接开发机并创建一个conda环境

创建一个名为py310的conda环境,安装python3.10

conda创建

1.2 第二关 Python 基础知识

闯关任务 Python实现wordcount

wordcount.py代码如下:

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 re
from collections import defaultdict

text = """Hello world!
This is an example.
Word count is fun.
Is it fun to count words?
Yes, it is fun!"""

def wordcount(text):
# 去除标点符号,只保留字母和空格
text = re.sub(r"[^\w\s]", "", text)

# 将所有字母转换为小写
text = text.lower()

# 以空格分割字符串,生成单词列表
words = text.split()

# 创建字典统计每个单词出现的次数
word_count = defaultdict(int)

for word in words:
word_count[word] += 1

return dict(word_count)

print(wordcount(text))

运行结果如下:

wordcount运行结果

闯关任务 Vscode连接InternStudio debug笔记

debug记录截图如下:

debug

2. 基础岛

2.1 第1关 书生大模型全链路开源开放体系

通过下图可以看到这最近一两年国产大模型的迅速成长的发展历史,目前已经逐渐追赶上了国际先进水平,未来可期!

InterLM成长路径

这里给出的全链路打通的体系视角对于了解大模型相关的技术和产品有很大的帮助。一个完整的大模型体系需要包括的板块有:

  • 数据
  • 预训练
  • 微调
  • 部署
  • 评测
  • 应用

书生大模型全链路开源开放体系

这里的LLM的思维链与最新的OpenAIo1模型具有很大的相似性,可见这确实是一种有效的优化LLM模型能力的方法。

思维链

思维链2

2.2 第2关 8G 显存玩转书生大模型 Demo

使用 Cli Demo 完成 InternLM2-Chat-1.8B 模型的部署,并生成 300 字小故事

 InternLM2-Chat-1.8B 模型 部署

使用 LMDeploy 完成 InternLM-XComposer2-VL-1.8B 的部署

InternLM-XComposer2-VL-1.8B 图文理解

使用 LMDeploy 完成 InternVL2-2B 的部署

使用 LMDeploy 完成 InternVL2-2B 的部署

2.3 第3关 浦语提示词工程实践

使用LangGPT生成提示词

在ChatGPT的LangGPT专家生成提示词。

提问词如下:

1
帮我生成一个两个小数比较专家的提示词,我希望能够准确的指明比较小数的步骤,即先比较小数点前的整数部分,再比较小数点后的小数部分,尤其注意比较小数的时候,需要按位一个一个数字比较。注意提示词应该是英文。
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
# Role: Assistant

## Profile
- author: LangGPT
- version: 1.0
- language: English
- description: You are tasked with comparing two decimal numbers step by step. First, compare the integer parts of the numbers. If they are the same, move on to compare the decimal parts. When comparing the decimal parts, compare each digit one by one starting from the first digit after the decimal point.

## Skills
1. Ability to compare numbers by analyzing both integer and decimal parts.
2. Precision in digit-by-digit comparison of decimal numbers.
3. Clear and logical step-by-step analysis.

## Rules
1. First, compare the integer parts of the two numbers.
2. If the integer parts are different, return the result based on which integer is larger or smaller.
3. If the integer parts are the same, proceed to compare the decimal parts.
4. Compare each digit after the decimal point one by one, starting from the first decimal digit.
5. If one number has more decimal digits but all prior digits are the same, the number with the additional non-zero digits is considered larger.
6. Ensure the comparison follows a strict left-to-right order when comparing decimal digits.

## Workflows
1. Receive two decimal numbers as input.
2. Extract and compare the integer parts of both numbers.
3. If the integers are equal, begin comparing the decimal parts digit by digit.
4. Return which number is larger or if they are equal, based on the comparison.

实验比较

没有提示词下对比13.11和13.8的大小,其会认为13.11更大。

无提示词下的输出

有提示词下,它会一个步骤一个步骤的比较,最终得出13.8更大的正确结论。

有提示词下的输出

2.4 第4关 浦InternLM + LlamaIndex RAG 实践

RAG前的问答

使用了第一部斗罗大陆的txt文本作为知识库,问答如下:

问题:斗罗大陆中唐三最后成了什么神?

RAG前的回答

可见其并不知道唐三最后成了什么神。

RAG后的问答

RAG后的回答

可以见到经过RAG调整后,模型使用《斗罗大陆》的知识库最后知道了唐三最后成为了海神。

2.5 第5关 XTuner 微调个人小助手认知

在XTuner微调之前询问相关问题得到的回答如下:

XTuner微调前的回答

使用XTuner利用如下的重复数据来进行微调:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"conversation": [
{
"input": "请介绍一下你自己",
"output": "我是滑滑蛋同学的小助手,内在是上海AI实验室书生·浦语的1.8B大模型哦"
}
]
},
{
"conversation": [
{
"input": "你在实战营做什么",
"output": "我在这里帮助滑滑蛋同学完成XTuner微调个人小助手的任务"
}
]
},

微调后同样的问题的回答如下,可见微调成功:

XTuner微调后的回答

不过又试了其他的一些问题,发现微调完之后模型过拟合了,只会说这两个问题回答了。

2.6 第6关 OpenCompass 评测 InternLM-1.8B 实践

注意在安装环境时可能会报错,发现主要是由于按照了numpy的2.x的版本,我换成了1.26.4的版本后就正常了。

安装好OpenCompass后,使用如下的命令,利用ceval_gen数据集评测InternLM-1.8B模型:

1
2
3
4
python run.py
--datasets ceval_gen \ # 数据集准备
--models hf_internlm2_chat_1_8b \ # 模型准备
--debug

评测结果如下:

ceval_gen数据集评测

OpenCompass也支持通过代码来控制评测的内容,如下代码定义了通过ceval数据集评测InternLM-1.8B模型:

1
2
3
4
5
6
7
8
from mmengine.config import read_base

with read_base():
from .datasets.ceval.ceval_gen import ceval_datasets
from .models.hf_internlm.hf_internlm2_chat_1_8b import models as hf_internlm2_chat_1_8b_models

datasets = ceval_datasets
models = hf_internlm2_chat_1_8b_models

使用命令python run.py configs/eval_tutorial_demo.py --debug运行,得到的评测结果与上面一致。

3. 进阶岛

3.1 第1关 探索 InternLM 模型能力边界

3.2 第2关 Lagent 自定义你的 Agent 智能体

首先使用默认配置来运行一个Agent,如下,确实可以通过ArxivSearch插件来搜索llama 3相关的论文。

Arxiv搜索

然后自定义一个Agent,这个Agent可以调用MagicMaker插件来生成相关的图画,这里是生成了一个国风的二次元美少女图画。

图画生成