回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

【书生大模型实战营】入门岛第2关_L0G2000_Python 基础知识

头像 JOVI 2024.11.14 174 0

闯关关卡

入门岛

 关卡编号关卡名称关卡资料
第2关L0G2000Python 基础知识

任务

https://github.com/InternLM/Tutorial/blob/camp4/docs/L0/Python/task.md

文档

https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python

视频

https://www.bilibili.com/video/BV1u61jYSExg

任务概览

任务类型

任务内容

预计耗时

闯关任务Leetcode 383(笔记中提交代码与leetcode提交通过截图)20mins
闯关任务Vscode连接InternStudio debug笔记10mins
可选任务pip安装到指定目录10mins

任务一

 

完成Leetcode 383, 笔记中提交代码与leetcode提交通过截图

image.png

代码
class Solution(object):
    def canConstruct(self, ransomNote, magazine):
        m = list(magazine)
        r = list(ransomNote)
        for i in range(0, len(m)):
            if m[i] in r:
                r.remove(m[i])
        if len(r) == 0:
            return True
        else:
            return False

Ch1 Conda虚拟环境

 

1.1 创建新环境

 

1.2 环境管理

 

1.3 安装虚拟环境到指定目录

 

 

Ch2 使用pip安装Python三方依赖包

 

2.1 使用pip安装包

 

2.2 安装requirement.txt

 

2.3 安装到指定目录

Ch3 使用本地Vscode连接InternStudio开发机

 

3.1 使用SSH连接开发机

VSCode是由微软开发一款轻量级但功能强大的代码编辑器,开源且完全免费。它拥有丰富的插件生态系统、跨平台支持、以及内置的Git控制功能,为开发者提供了高效便捷的编码体验。

 

VScode下载地址:Visual Studio Code - Code Editing. Redefined

 

首先需要安装Remote-SSH插件,安装完成后进入Remote Explorer,在ssh目录下新建一个ssh链接。

 

点击+号,此时会有弹窗提示输入SSH链接命令(具体请看下文),回车后选择要更新的SSH配置文件,默认选择第一个即可(如有需要也可新建一个SSH配置文件)。

 

开发机的链接命令可以在开发机控制台对应开发机"SSH连接"找到,复制登录命令到vscode的弹窗中然后回车,vscode就会开始链接InternStudio的服务器,记得此时切回去复制一下ssh的密码,待会会用到。

 

在新的弹窗中将SSH密码粘贴进去然后回车。随后会弹窗让选择远程终端的类型,选择Linux即可,因为我们的开发机是Linux系统。

 

首次连接会进行一些初始化设置,可能会比较慢,请耐心等待。后续打开文件夹时可能会再次需要输入密码,建议保持开发机的控制台开启以备不时之需。

 

当界面左下角显示远程连接地址SSH:ssh.intern-ai.org.cn时,说明连接成功。此时,我们可以像在本地使用VSCode一样,在开发机上进行各种操作。

image.png

 

连接成功后我们打开远程连接的vscode的extensions,在远程开发机(SSH:SSH.INTERN-AI.ORG.CN) 上安装好python的插件,后面python debug会用到。也可以一键把我们本地vscode的插件安装到开发机上。

 

 

 

3.2如何在Vscode中打开终端

可以有两种常用的方法打开终端:

  1. 单击VSCode页面底部状态栏中的“终端”图标(通常显示为两个图标一个X和一个!),可以快速打开VSCode的终端面板。
  2. 使用快捷键Ctrl+`(反引号,tab键上面那一个),也可以快速打开VSCode的终端面板。

TIPS:终端面板右上方的+可以新建一个TERMINAL。

Ch4 使用vscode连接开发机进行python debug

 

4.1 什么是debug?

当你刚开始学习Python编程时,可能会遇到代码不按预期运行的情况。这时,你就需要用到“debug”了。简单来说,“debug”就是能再程序中设置中断点并支持一行一行地运行代码,观测程序中变量的变化,然后找出并修正代码中的错误。而VSCode提供了一个非常方便的debug工具,可以帮助你更容易地找到和修复错误。

 

4.2 使用Vscode进行Python debug的流程

 

4.2.1 debug单个python文件

 

Step1.安装Python扩展

Step2.配置调试

Step3.设置断点

Step4.启动debug

Step5.查看变量

Step6.单步执行代码

Step7.修复错误并重新运行

image.png

 

通过遵循以上步骤,你可以使用VSCode的debug功能来更容易地找到和修复你Python代码中的错误。可以自己编写一个简单的python脚本,并尝试使用debug来更好的理解代码的运行逻辑。记住,debug是编程中非常重要的一部分,所以不要怕花时间在这上面。随着时间的推移,你会变得越来越擅长它!

 

4.2.2 不同的断点

 

表达式条件断点

触发计数条件断点

记录日志条件断点

 

 

4.3 在vscode使用命令行进行debug

很多时候我们要debug的不止是一个简单的python文件,而是很多参数,参数中不止会有简单的值还可能有错综复杂的文件关系,甚至debug一整个项目。这种情况下,直接使用命令行来发起debug会是一个更好的选择。

 

4.3.1 vscode设置

vscode支持通过remote的方法连接我们在命令行中发起的debug server。首先我们要配置一下debug的config。

还是点击VSCode侧边栏的“Run and Debug”(运行和调试),单击"create a lauch.json file"

选择debugger时选择python debuger。选择debug config时选择remote attach就行,随后会让我们选择debug server的地址,因为我们是在本地debug,所以全都保持默认直接回车就可以了,也就是我们的server地址为 localhost:5678

image.png

 

配置完以后会打开配置的json文件,但这不是重点,可以关掉。这时我们会看到run and debug界面有变化,出现了debug选项。


4.3.2 debug命令行

 

4.3.3 使用别名简化命令

 

任务二

下面是一段调用书生浦语API实现将非结构化文本转化成结构化json的例子,其中有一个小bug会导致报错。请大家自行通过debug功能定位到报错原因并做修正。

注意:

提交代码时切记删除自己的api_key! 本段demo为了方便大家使用debug所以将api_key明文写在代码中,这是一种极其不可取的行为!

作业提交时需要有debug过程的图文笔记,以及修改过后的代码。

代码
from openai import OpenAI
import json
def internlm_gen(prompt,client):
    '''
    LLM生成函数
    Param prompt: prompt string
    Param client: OpenAI client 
    '''
    response = client.chat.completions.create(
        model="internlm2.5-latest",
        messages=[
            {"role": "user", "content": prompt},
      ],
        stream=False
    )
    return response.choices[0].message.content

api_key = ''
client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=api_key)

content = """
书生浦语InternLM2.5是上海人工智能实验室于2024年7月推出的新一代大语言模型,提供1.8B、7B和20B三种参数版本,以适应不同需求。
该模型在复杂场景下的推理能力得到全面增强,支持1M超长上下文,能自主进行互联网搜索并整合信息。
"""
prompt = f"""
请帮我从以下``内的这段模型介绍文字中提取关于该模型的信息,要求包含模型名字、开发机构、提供参数版本、上下文长度四个内容,以json格式返回。
`{content}`
"""
res = internlm_gen(prompt,client)
res_json = json.loads(res)
print(res_json)

Ch5 Python调用InternLM api

5.1 如何获取api key

前往书生浦语的API文档,登陆后点击API tokens。初次使用可能会需要先填写邀请码。

然后创建一个新的api token。

这里一定要注意,浦语的token只有刚创建的时候才能看到全文,后续没法再查看已经创建好的token,如果忘记需要重新创建,所以创建完了以后记得先复制保存到本地。

image.png

 

5.2 如何使用InternLM api

我们可以使用openai python sdk来调用InternLM api。注意在配置api key时,更推荐使用环境变量来配置以避免token泄露:

import os

api_key = os.getenv('api_key')

#api_key = "" #也可以明文写在代码内,不推荐

 

我们可以在终端中临时将token加入变量,此时该环境变量只在当前终端内有效。所以该种方法需要我们在该终端中运行我们的py脚本:

export api_key="填入你的api token"

python internlm_test.py

 

若是想永久加入环境变量,可以对 ~/.bashrc 文件中添加以下命令。

export api_key="填入你的api token"

 

保存后记得source ~/.bashrc。

 

问题1:发生异常: ModuleNotFoundError

 

  • image.png

 

解决:pip install openai

 

image.png
 

问题2:发生异常: JSONDecodeError

image.png

解决:主要解决json.loads(res)执行时,数据为空或提取不到的问题

image.png

Ch6: Python基础

评论

user-avatar