相关推荐recommended
书生.浦语大模型实战一
作者:mmseoamin日期:2024-02-06

从专用模型到通用大模型

数据

书生.万卷1.0

  • 文本
  • 图像-文本
  • 视频数据

    OpenDataLab开放平台

    • 图像:ImageNet
    • tokens语料:WikiQA
    • 音频
    • 视频:MovieNet
    • 3D模型

      预训练

      微调

      增量续训

      使用场景:让基座模型学习到一些新知识,如某个垂类领域知识

      训练数据:文章、书籍、代码等

      有监督微调

      使用场景:让模型学会理解和遵循各种指令、或者注入少量领域知识

      训练数据:高质量对话、问答数据

      有监督微调分为

      • 全量参数微调
      • 部分参数微调:固定模型主干,只对部分参数更新

        部署

        大语言模型特征

        • 内存开销巨大
          • 庞大的参数量
          • 采用自回归生成token,需要缓存k/v
          • 动态Shape
            • 请求数不固定
            • token逐个生成、且数量不定
            • 模型结构相对简单
              • transformer结构,大部分是decoder-only

                智能体

                由于大语言模型的局限性,例如

                • 最新信息和知识的获取
                • 回复的可靠性
                • 数学计算
                • 工具使用和交互

                  因此,需要在LLM的基础上,封装诸多策略和工具,如下图。

                  书生.浦语大模型实战一,在这里插入图片描述,第1张

                  轻量智能体框架Lagent

                  书生.浦语大模型实战一,在这里插入图片描述,第2张

                  Task1 InternLM-Chat-7B 智能对话 Demo

                  bash # 请每次使用 jupyter lab 打开终端时务必先执行 bash 命令进入 bash 中
                  /root/share/install_conda_env_internlm_base.sh internlm-demo
                  

                  下载过程如下

                  书生.浦语大模型实战一,在这里插入图片描述,第3张

                  激活并进入虚拟环境

                  conda activate internlm-demo
                  

                  在虚拟环境中安装运行demo所需要的依赖

                  # 升级pip
                  python -m pip install --upgrade pip
                  pip install modelscope==1.9.5
                  pip install transformers==4.35.2
                  pip install streamlit==1.24.0
                  pip install sentencepiece==0.1.99
                  pip install accelerate==0.24.1
                  

                  书生.浦语大模型实战一,在这里插入图片描述,第4张

                  模型下载或复制

                  InternStudio 平台的 share 目录下已经为我们准备了全系列的 InternLM 模型,所以我们可以直接复制即可。使用如下命令复制:

                  mkdir -p /root/model/Shanghai_AI_Laboratory
                  cp -r /root/share/temp/model_repos/internlm-chat-7b /root/model/Shanghai_AI_Laboratory
                  

                  代码下载

                  首先 clone 代码,在 /root 路径下新建 code 目录,然后切换路径, clone 代码.

                  cd /root/code
                  git clone https://gitee.com/internlm/InternLM.git
                  

                  书生.浦语大模型实战一,在这里插入图片描述,第5张

                  将 /root/code/InternLM/web_demo.py 中 29 行和 33 行的模型更换为本地的 /root/model/Shanghai_AI_Laboratory/internlm-chat-7b

                  开发机终端运行

                  我们可以在 /root/code/InternLM 目录下新建一个 cli_demo.py 文件,将以下代码填入其中:

                  import torch
                  from transformers import AutoTokenizer, AutoModelForCausalLM
                  model_name_or_path = "/root/model/Shanghai_AI_Laboratory/internlm-chat-7b"
                  tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)
                  model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='auto')
                  model = model.eval()
                  system_prompt = """You are an AI assistant whose name is InternLM (书生·浦语).
                  - InternLM (书生·浦语) is a conversational language model that is developed by Shanghai AI Laboratory (上海人工智能实验室). It is designed to be helpful, honest, and harmless.
                  - InternLM (书生·浦语) can understand and communicate fluently in the language chosen by the user such as English and 中文.
                  """
                  messages = [(system_prompt, '')]
                  print("=============Welcome to InternLM chatbot, type 'exit' to exit.=============")
                  while True:
                      input_text = input("User  >>> ")
                      input_text = input_text.replace(' ', '')
                      if input_text == "exit":
                          break
                      response, history = model.chat(tokenizer, input_text, history=messages)
                      messages.append((input_text, response))
                      print(f"robot >>> {response}")
                  

                  在远程终端运行

                  python /root/code/InternLM/cli_demo.py
                  

                  书生.浦语大模型实战一,在这里插入图片描述,第6张

                  书生.浦语大模型实战一,在这里插入图片描述,第7张

                  1938年,晋西北,秋风萧瑟,草木凋零。一座小村庄里,住着一位名叫王老汉的老人。他年过六旬,膝下只有一女,名叫小红。小红从小便被王老汉养大,两人相依为命,过着平淡而幸福的生活。

                  然而,日本侵略者的到来打破了这种平静。1937年,日本鬼子突然袭击了王老汉的村庄,村民们纷纷逃窜,王老汉也因此失去了小红。他悲痛欲绝,发誓要为小红报仇雪恨。

                  经过几年的准备,王老汉终于等来了复仇的机会。他带领自己的部队,开始了游击战争,与日本鬼子展开了激烈的战斗。在这场战争中,王老汉不惧生死,勇往直前,最终带领部队成功地打败了日本鬼子。

                  小红得知后,感激不已,但她却选择了与王老汉分开,前往山区继续开展游击战争。虽然两人的联系已经断绝,但他们之间的感情却更加坚定。最终,王老汉带着胜利的喜悦,带着对小红的思念,离开了人世。

                  王老汉的牺牲,让人们更加深刻地认识到侵略者的不义,也让人们更加珍视和平与安宁。他的故事,将永远流传下去。

                  web demo运行

                  继续在虚拟环境中运行

                  streamlit run web_demo.py --server.address 127.0.0.1 --server.port 6006
                  

                  要想在本地浏览器中打开web页面,还需要配置端口映射,即在本地生成ssh密钥对,将公钥配置到开发机中,配置完成后在本地终端输入端口映射命令。最后的开发机端口点击ssh连接进行查看。

                  ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p xxxxx
                  

                  书生.浦语大模型实战一,在这里插入图片描述,第8张

                  Lagent

                  加载模型成功

                  书生.浦语大模型实战一,在这里插入图片描述,第9张

                  huggingface-cli下载

                  1.安装依赖

                  pip install -U huggingface_hub
                  

                  2.众所周知的原因,需要将镜像源换为国内

                  export HF_ENDPOINT=https://hf-mirror.com
                  

                  书生.浦语大模型实战一,在这里插入图片描述,第10张

                  书生.浦语大模型实战一,在这里插入图片描述,第11张

                  reference

                  如何快速下载huggingface模型——全方法总结

                  Huggingface 镜像站