闯关地图-进阶岛

news/2024/9/29 11:29:23

第1关

在 CompassArena 中选择双模型对话,与InternLM2.5及另外任意其他模型对话,收集 5 个 InternLM2.5 输出结果不如其他模型的对话案例,以及 InternLM2.5 的 5 个 Good Case,并写成一篇飞书文档提交到:https://aicarrier.feishu.cn/share/base/form/shrcnZ4bQ4YmhEtMtnKxZUcf1vd

作业链接:https://p157xvvpk2d.feishu.cn/docx/KDzJd4Q66o6jhLxPsqYc1G1PnIf

第2关

基础任务

  • 使用 Lagent 自定义一个智能体,并使用 Lagent Web Demo 成功部署与调用,记录复现过程并截图。
  1. 环境配置

    git clone https://github.com/InternLM/lagent.git
    cd lagent && git checkout 81e7ace && pip install -e .
    
  2. 使用LMDeploy部署 InernLM2.5-7B-Chat 模型:

    model_dir="/home/scy/models/internlm/internlm2_5-7b-chat"  # 模型本地路径
    lmdeploy serve api_server $model_dir --model-name internlm2_5-7b-chat
    
  3. 基于Lagent自定义智能体,创建文件lagent/actions/magicmake.py,代码如下:

    import json
    import requestsfrom lagent.actions.base_action import BaseAction, tool_api
    from lagent.actions.parser import BaseParser, JsonParser
    from lagent.schema import ActionReturn, ActionStatusCodeclass MagicMaker(BaseAction):styles_option = ['dongman',  # 动漫'guofeng',  # 国风'xieshi',   # 写实'youhua',   # 油画'manghe',   # 盲盒]aspect_ratio_options = ['16:9', '4:3', '3:2', '1:1','2:3', '3:4', '9:16']def __init__(self,style='guofeng',aspect_ratio='4:3'):super().__init__()if style in self.styles_option:self.style = styleelse:raise ValueError(f'The style must be one of {self.styles_option}')if aspect_ratio in self.aspect_ratio_options:self.aspect_ratio = aspect_ratioelse:raise ValueError(f'The aspect ratio must be one of {aspect_ratio}')@tool_apidef generate_image(self, keywords: str) -> dict:"""Run magicmaker and get the generated image according to the keywords.Args:keywords (:class:`str`): the keywords to generate imageReturns::class:`dict`: the generated image* image (str): path to the generated image"""try:response = requests.post(url='https://magicmaker.openxlab.org.cn/gw/edit-anything/api/v1/bff/sd/generate',data=json.dumps({"official": True,"prompt": keywords,"style": self.style,"poseT": False,"aspectRatio": self.aspect_ratio}),headers={'content-type': 'application/json'})except Exception as exc:return ActionReturn(errmsg=f'MagicMaker exception: {exc}',state=ActionStatusCode.HTTP_ERROR)image_url = response.json()['data']['imgUrl']return {'image': image_url}
    
  4. 修改文件lagent/examples/internlm2_agent_web_demo.py,添加我们自定义的工具MagicMaker

    from lagent.actions import ActionExecutor, ArxivSearch, IPythonInterpreter
    + from lagent.actions.magicmaker import MagicMaker
    from lagent.agents.internlm2_agent import INTERPRETER_CN, META_CN, PLUGIN_CN, Internlm2Agent, Internlm2Protocol...action_list = [ArxivSearch(),
    +             MagicMaker(),]
    
  5. 在另一个窗口中启动 Lagent 的Web Demo:

    streamlit run examples/internlm2_agent_web_demo.py
    
  6. 效果图如下:

    img

第3关

基础任务

  • 使用结合W4A16量化与kv cache量化的internlm2_5-1_8b-chat模型封装本地API并与大模型进行一次对话,作业截图需包括显存占用情况与大模型回复,参考4.1 API开发(优秀学员必做),请注意2.2.3节与4.1节应使用作业版本命令。
  1. 使用w4a16方式进行模型量化,执行以下脚本:

    lmdeploy lite auto_awq \/home/scy/models/internlm/internlm2_5-1_8b-chat \  # 模型本地路径--calib-dataset 'ptb' \--calib-samples 128 \--calib-seqlen 2048 \--w-bits 4 \--w-group-size 128 \--batch-size 1 \--search-scale False \--work-dir /home/scy/models/internlm/internlm2_5-1_8b-chat-w4a16-4bit  # 量化后的模型存储路径
    
  2. 执行如下命令,查看量化后的模型所占的磁盘空间:

    du -sh ~/models/internlm/*
    

    效果图如下:

    img

    量化前模型占空间3.6G,量化后占空间1.5G

  3. 对w4a16量化后的模型使用kv cache int4量化,执行以下脚本:

    lmdeploy serve api_server \/home/scy/models/internlm/internlm2_5-1_8b-chat-w4a16-4bit \--model-format awq \--quant-policy 4 \--cache-max-entry-count 0.4\--server-name 0.0.0.0 \--server-port 23333 \--tp 1
    

    查看显存占用情况,如下图:

    img

  4. 执行如下命令,调用部署后的接口:

    lmdeploy serve api_client http://0.0.0.0:23333
    

    对话效果图如下:

    img

  • 使用Function call功能让大模型完成一次简单的"加"与"乘"函数调用,作业截图需包括大模型回复的工具调用情况,参考4.2 Function call(选做)
  1. 执行以下脚本,部署internlm2.5-7b-chat模型:

    model_dir="/home/scy/models/internlm/internlm2_5-7b-chat"  # 模型本地存储路径
    lmdeploy serve api_server $model_dir --server-port 23333 --api-keys internlm
    
  2. 新建文件internlm2_5_func.py,代码如下:

    from openai import OpenAIdef add(a: int, b: int):return a + bdef mul(a: int, b: int):return a * btools = [{'type': 'function','function': {'name': 'add','description': 'Compute the sum of two numbers','parameters': {'type': 'object','properties': {'a': {'type': 'int','description': 'A number',},'b': {'type': 'int','description': 'A number',},},'required': ['a', 'b'],},}
    }, {'type': 'function','function': {'name': 'mul','description': 'Calculate the product of two numbers','parameters': {'type': 'object','properties': {'a': {'type': 'int','description': 'A number',},'b': {'type': 'int','description': 'A number',},},'required': ['a', 'b'],},}
    }]
    messages = [{'role': 'user', 'content': 'Compute (3+5)*2'}]client = OpenAI(api_key='internlm',   # 填写正确的api_keybase_url='http://0.0.0.0:23333/v1')
    model_name = client.models.list().data[0].id
    response = client.chat.completions.create(model=model_name,messages=messages,temperature=0.8,top_p=0.8,stream=False,tools=tools)
    print(response)
    func1_name = response.choices[0].message.tool_calls[0].function.name
    func1_args = response.choices[0].message.tool_calls[0].function.arguments
    func1_out = eval(f'{func1_name}(**{func1_args})')
    print(func1_out)messages.append({'role': 'assistant','content': response.choices[0].message.content
    })
    messages.append({'role': 'environment','content': f'3+5={func1_out}','name': 'plugin'
    })
    response = client.chat.completions.create(model=model_name,messages=messages,temperature=0.8,top_p=0.8,stream=False,tools=tools)
    print(response)
    func2_name = response.choices[0].message.tool_calls[0].function.name
    func2_args = response.choices[0].message.tool_calls[0].function.arguments
    func2_out = eval(f'{func2_name}(**{func2_args})')
    print(func2_out)
    

效果图如下:

img

第4关

第5关

第6关

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/56083.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

PA1-总结

前言 代码全是自己写的,没看过参考代码,思路也有部分和指导书不一样,算是个原创?然后毕竟pa1是简单的部分,也没有什么值得骄傲的地方,只是作为一次记录。 毕竟自己的水平还是有限,可能部分地方会有些bug。自己成绩也不太好吧,程序设计不会,计算机系统基础说实话是0,只…

南沙信奥塞陈老师解一本通题:1409:判决素数个数

​【题目描述】 输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。 【输入】 两个整数X和Y(1≤X,Y≤105)。#include <bits/stdc++.h> using namespace std; bool IsPrime(int n) {if(n<=1)return false;for(int i=2;i<=sqrt(n);i++)if(n%i==0)return fals…

win10更新为win11后OneNote笔记全部消失的完整解决方案

目录背景解决步骤1:下载OneNote for Windows10,找到笔记Here is the link to old OneNote for Windows 10 app解决步骤2:导出找到的笔记使用OneNote网页版导出笔记解决步骤3:导入找到的笔记至新版OneNote解决报错:直接copy一份副本至当前笔记本 背景 电脑更新为win11后,我…

远距离跨网络实现windows远程桌面连接

1.保证已经打开被连接电脑---远程访问---权限。 我的电脑--右键--属性--远程设置2.选择允许连接 (选择用户和高级没有特殊设置可以不动,被连接电脑当前登陆的账号就可以满足权限)3.打开--控制面板4.依次选择至当前位置,打开允许应用或功能通过防火墙5.勾选远程桌面专用网络…

使用 niljson 处理 Go 语言中 JSON 的空值类型

使用 niljson 处理 Go 语言中 JSON 的空值类型 原创 源自开发者 源自开发者2024年09月03日 11:43 广东 听全文源自开发者 专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。 321篇原创内容公众号在使用Go语言进行JSON数据的序列化…

在本地通过Docker安装MySQL并配置持久化

看前须知 这里使用Mac下的OrbStack代替Docker,都是命令行操作,除了可能出现的UI不同外没有任何区别。 拉取镜像 由于是Mac环境,所以优先使用arm64结构,关于是否支持所需架构,可以在Docker Hub上查,一般支持的都会写明。 这里搜索MySQL,进入官方镜像就可以在Overview的Qu…

Mistral 大语言模型

Mistral AI Mistral AI team Mistral AI 是一家销售人工智能产品的法国公司。它由 Meta Platforms 和 Google DeepMind 的前员工于 2023 年 4 月创立。该公司于 2023 年 10 月筹集了 3.85 亿欧元,2023 年 12 月估值超过 20 亿美元Mistral.AI 愿景与使命 我们是一个具有高科学标…

配置vscode中CC++编译环境

[非完全体]配置vscode中C&C++编译环境 参考文章链接在文末。 Win10系统。 本文可能不太适合完全小白的同学参考学习... 如果你在配置中遇到了什么问题,可以看一看,或许我能为你提供解决方案。 一、卸载VScode,删除之前的配置 这一步主要是因为本人之前一直在用vscode,但…