首页 > 其他分享 >闯关地图-进阶岛

闯关地图-进阶岛

时间:2024-09-03 13:13:52浏览次数:4  
标签:进阶 -- internlm2 模型 地图 model 闯关 response name

第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 requests
    
    from lagent.actions.base_action import BaseAction, tool_api
    from lagent.actions.parser import BaseParser, JsonParser
    from lagent.schema import ActionReturn, ActionStatusCode
    
    class 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 = style
            else:
                raise ValueError(f'The style must be one of {self.styles_option}')
            
            if aspect_ratio in self.aspect_ratio_options:
                self.aspect_ratio = aspect_ratio
            else:
                raise ValueError(f'The aspect ratio must be one of {aspect_ratio}')
        
        @tool_api
        def 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 image
    
            Returns:
                :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 OpenAI
    
    def add(a: int, b: int):
        return a + b
    
    def mul(a: int, b: int):
        return a * b
    
    tools = [{
        '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_key
        base_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关

标签:进阶,--,internlm2,模型,地图,model,闯关,response,name
From: https://www.cnblogs.com/scy157609962/p/18394347

相关文章

  • C语言指针的进阶理解——指针数组
    //整型数组 //顾名思义是存放整型类型的元素的数组 intarr1[]={1,2,3,4,5};//arr内元素的类型是int //字符数组 //顾名思义是存放字符类型元素的数组 chararr2[]={'a','b','c'};//arr内元素的类型是char那么指针数组你是不是也能推算出来它大概的模样了,差不......
  • Vue2 - 最新实现百度地图3D立体感视角教程及示例代码,利用WebGL实现3d百度地图详细流程
    前言如果您需要Vue3版本,请访问在vue2|nuxt2项目开发中,详解实现“安装引入百度地图webgl技术,实现3d地图教程”将百度地图变成3D视角效果,让百度地图平面2D视图和3D立体视图进行切换渲染显示,vue如何实现百度地图的三维立体地图效果,解决WebGL引入报错或无效、3D地图......
  • 《JavaEE进阶》----9.<SpringMVC实践项目:【简易对话留言板(数据存在数据库中)】>
    本篇博客讲解设计的一个网页版简易对话留言板。这个是将数据存在数据库中。我们通过链接本地数据库。在这里面存入的数据。此时数据存在在硬盘中,只要数据不被删除,硬盘不损坏。那么这些数据就会被永久保存引入的依赖:配置数据库:spring:datasource:#数据库连接配置......
  • GeoScene Pro教程(006):GeoScenePro地图集制作
    文章目录1、加载数据2、修改地图样式3、修改外观4、显示上下左右各为哪个地市5、新建布局6、选择地图框显示区域7、插入指北针、比例尺、图例8、显示相邻地市9、导出地图地图系列的构建来自单个地图图幅的集合,每个图幅显示特定的地图范围,包含动态地......
  • 【Java】—— Java面向对象进阶:Java中的账户管理-基础账户与可透支账户的实现与测试
    目录1.基础账户类(Account)2.测试基础账户类3.可透支账户类(CheckAccount)4.测试可透支账户类运行结果1.基础账户类(Account)        写一个名为Account的类模拟账户。该类的属性和方法如下图所示。该类包括的属性:账号id,余额balance,年利率annualInterestRate;......
  • C语言指针(进阶内容)
    目录1.指针的基本概念:2.不同类型的指针的意义是什么?3.野指针是什么?4.指针加减整数 5.指针运算(指针-指针)6.一级指针和二级指针以及多级指针是什么意思?7.指针数组8.数组指针9.函数指针1.指针的基本概念:1.指针就是个变量,用来存放地址,地址唯一标识一块内存空......
  • SQL进阶技巧:如何取时间序列最新完成状态的前一个状态并将完成状态的过程进行合并?
    目录0问题描述1数据准备2问题分析问题1:取最新完成状态的前一个状态 方法1:分析函数求解方法2:关联求解问题2:如何将完成状态的过程合并 方法1:分析函数作为辅助变量 方法2:自关联形式获取全量结果集 3小结0问题描述表status字段及内容如下:date_id为连续自增......
  • 让AI学会打光,从此利好电商(Stable Diffusion进阶篇:Imposing Consistent Light)
    IC-Light的下载安装有两个不同的节点包可以在ComfyUI中安装IC-Light,一个是kijai大佬的节点包:https://github.com/kijai/ComfyUI-IC-Light没有魔法的小伙伴可以扫描下面二维码获取相关整合资料!另一个是huchenlei大佬的节点包:https://github.com/huchenlei/ComfyUI-IC......
  • C语言函数递归(含扫雷进阶思路)
    文章目录一、什么是递归二、递归的使用思路和限制条件1.递归的使用思路2.递归的限制条件三、递归的举例举例1:求n的阶乘2.举例2:顺序打印⼀个整数的每⼀位四、递归与迭代对比五、递归与迭代对比举例七、扫雷进阶思路一、什么是递归  递归是学习C语⾔函数绕不开的......
  • Datawhale X 李宏毅苹果书AI夏令营深度学习进阶(三)
    一.批量归一化继续上一篇文章的批量归一化,如果是固定的学习率,可能很难得到好的结果,所以我们才需要自适应的学习率、Adam等比较进阶的优化的方法,才能够得到好的结果。如果我们可以给不同的维度,同样的数值范围的话,那我们可能就可以制造比较好的误差表面,让训练变得比较容易一点其实......