浦语LLM & InternLM2 lec2

94 阅读2分钟

基本是追着喂饭喂到嘴里了, 原文链接 github.com/InternLM/Tu…

比较有趣的地方

image.png 这里自定义了一个studio-conda 的指令

image.png 使用type指令可以查看具体的位置

image.png 看到了list函数,由于我不太熟悉shell,因此在执行 studio-conda list之后, 很神奇的跑了一遍安装过程

image.png 目前还没懂为什么会出现这种情况,因此了解了一下bash

image.png 这里好像没执行list()函数,而是执行了clone 函数,重新下载了一个名为 list的环境

image.png 在无参情况下, help函数被成功执行

image.png 在有参情况下,list函数也被执行

image.png

image.png 可以看到, 函数的功能主要是通过 dispatch来调度, 其中 最下面的 dispatch $@ 代表使用dispatch 函数接受终端所有的参数, $1 代表参数的位置,这也解释了为什么之前出错。

多轮对话问题

image.png 其实到了代码层面就没网页版那么方便了, 网页的多轮对话其实就是利用了prompt 的role属性来实现上下文的记忆,这里贴一个我用gpt-3.5的图

image.png

展示问题

目前主流的工具有 gradio 和 streamlit,浦语训练营教程推的是 streamlit

streamlit run /root/Tutorial/helloworld/bajie_chat.py --server.address 127.0.0.1 --server.port 6006

代码里可以看到streamlit的使用

    import streamlit as st
    st.title('猪猪Chat-InternLM2')

    generation_config = prepare_generation_config()

    # Initialize chat history
    if 'messages' not in st.session_state:
        st.session_state.messages = []

    # Display chat messages from history on app rerun
    for message in st.session_state.messages:
        with st.chat_message(message['role']):
            st.markdown(message['content'])

    # Accept user input
    if prompt := st.chat_input('What is up?'):
        # Display user message in chat message container
        with st.chat_message('user'):
            st.markdown(prompt)
        real_prompt = combine_history(prompt)
        # Add user message to chat history
        st.session_state.messages.append({
            'role': 'user',
            'content': prompt,
        })

        with st.chat_message('robot'):
            message_placeholder = st.empty()
            for cur_response in generate_interactive(
                    model=model,
                    tokenizer=tokenizer,
                    prompt=real_prompt,
                    additional_eos_token_id=92542,
                    **asdict(generation_config),
            ):
                # Display robot response in chat message container
                message_placeholder.markdown(cur_response + '▌')
            message_placeholder.markdown(cur_response)
        # Add robot response to chat history
        st.session_state.messages.append({
            'role': 'robot',
            'content': cur_response,  # pylint: disable=undefined-loop-variable
        })
        torch.cuda.empty_cache()

主要就是实现模型的快速展示,作用和gradio大同小异吧,这里放个hugging face的实例,模型用的是stable-diffusion-xl-base-1.0

image.png