Skip to main content

竞赛问题与解答

无法连接GPU服务器

有同学问到无法连接GPU服务器的问题,这可能是内存不足导致的问题。

问题表现:SSH 连接 GPU服务器时,无法连接成功,一直卡住,并提示:

Setting up SSH Host xx.xxx.xxx.xx:(details) Initializing VS Code Server

在运行程序时,可以多注意内存使用率。

在训练数据集时,可以分批进行。比如一次只取10万或50万。

然后使用以下命令,在终端查看使用率情况:

free -h -s 5

其中,-h 表示,显示人类可读输出。-s N-s 5表示命令每隔N(5)秒重复打印一次。可以按 ctrl + c 结束输出。

输出如下:

              total        used        free      shared  buff/cache   available
Mem: 39G 620M 19G 9.0M 18G 38G
Swap: 0B 0B 0B

total used free shared buff/cache available
Mem: 39G 581M 19G 9.0M 18G 38G
Swap: 0B 0B 0B

total used free shared buff/cache available
Mem: 39G 581M 19G 9.0M 18G 38G
Swap: 0B 0B 0B
……(持续输出)

其中,total 表示总量,used 表示使用量,free表示空闲交换区的量。主要查看 used

参考数据集

这里是我们提供的一些数据集,可以在服务器上下载。

下载方式和示例中下载模型的方法一样。先进入服务器,在服务器终端输入命令,即可下载。

我们提供了3个类型的数据集:社区问答数据集,中英翻译数据集,中文闲聊数据。

社区问答数据集:

  • 大小:400万

  • 结构:

    {
    "qid":<qid>,
    "title":<title>,
    "desc":<desc>,
    "topic":<topic>,
    "star":<star>,
    "content":<content>,
    "answer_id":<answer_id>,
    "answerer_tags":<answerer_tags>
    }

    其中,qid是问题的id,title是问题的标题,desc是问题的描述,可以为空;topic是问题所属的话题,star是该回复的点赞个数,content是回复的内容,answer_id是回复的ID,answerer_tags是回复者所携带的标签。

  • 下载方式:

    // 下载
    wget -O webtext2019zh.zip "https://gpttrain-1307966650.cos.ap-guangzhou.myqcloud.com/webtext2019zh.zip"

    // 解压
    unzip webtext2019zh.zip

    解压后有3个文件:web_text_zh_testa.json, web_text_zh_train.json, web_text_zh_valid.json

中英翻译数据集:

  • 大小:500万

  • 结构:

    {
    "english": <english>,
    "chinese": <chinese>
    }

    其中,english是英文句子,chinese是中文句子,中英文一一对应。

  • 下载方式:

    // 下载
    wget -O translation2019zh.zip "https://gpttrain-1307966650.cos.ap-guangzhou.myqcloud.com/translation2019zh.zip"

    // 解压
    unzip translation2019zh.zip

    解压后有2个文件:translation2019zh_valid.json, translation2019zh_train.json

中文闲聊数据:

  • 大小:100万

  • 结构:无,txt格式。

  • 下载方式:

    // 下载
    wget -O train_100w.txt "https://gpttrain-1307966650.cos.ap-guangzhou.myqcloud.com/train_100w.txt"

gitlab 操作

在 gitlab 中,如果要方便组员合并分支,项目的 maintainer 用户有权设置其他的 maintainer。但只能修改自己邀请进来的 member 用户的权限。

如果无法修改权限,是因为该用户是从组里继承的,而非邀请的。这时,可以重新把组员拉进项目组,以修改权限。

如果大家希望了解更多gitlab的用法,可以看看我们官网的文章《Hello World in Gitlab》

chatgpt接口使用

因为 chatgpt 服务器本身较多人访问,有一定限制,调用 chatgpt 接口可能会报错。

Code: 200 表示调用成功。

错误码为 403, 表示 OpenAI 服务器拒绝访问,可以稍后再试。

错误码为 429, 表示 OpenAI 服务器限流,可以稍后再试。

错误码为 500,表示 OpenAI 服务发生未知错误,可以在群里联系工作人员处理。

错误码为 503,表示 OpenAI 服务器繁忙,可以稍后再试。

出现其他未知错误,大家也可以在群里提出来,我们会有工作人员处理的。

训练数据集格式

在培训会上,我们使用了 txt 格式的数据集进行训练。

了解到,有些同学使用的数据集是 json 格式的。实际上,json 格式数据不必按照例子转为 txt 格式,json 格式也是可以直接使用的。

更换数据集的格式,影响范围是“# 数据预处理”和“# 数据转换”两部分的代码。以下是使用 json 格式数据集的“# 数据预处理”和“# 数据转换”的参考代码:

#数据预处理
with open(trainpath,'r',encoding='utf-8') as f:
for line in f.readlines():
dic = json.loads(line)
traindata.append(dic)
#数据转换
train_data_index = []
train_data_len = []
sep_id = tokenizermix.sep_token_id
cls_id = tokenizermix.cls_token_id
eos_id = tokenizermix.eos_token_id
for sample in traindata[200000:400000]:
input_ids = [cls_id]
content = sample.get("english").lower()
title = sample.get("chinese")
if "\r\n" in content:
content = content.replace("\r\n","")
else:
content = content.replace("\n","")

# content = "摘要:" + content
content_idx = tokenizermix.encode(content,add_special_tokens=False)

title_idx = tokenizermix.encode(title,add_special_tokens=False)
if len(title) > 100:
continue
input_ids += content_idx
input_ids.append(sep_id)
# 内容长度最大为900
if len(content_idx) > 100:
# content_idx = content_idx[:100]
continue
input_ids += title_idx

input_ids.append(eos_id)
if len(input_ids) > 150:
continue
train_data_len.append(len(input_ids))
train_data_index.append(input_ids)

内核选择失败

如果选择内核失败,先检查扩展是否安装成功。有些同学出现了“安装速度慢”的问题,我们及时调整了网络配置,解决了这个问题。

如果出现其他类似问题,也可以在群里反馈,我们会有工作人员处理的。

sql语法

有些同学在 sql 的使用上,遇到了一些问题。今天我们来分享一下 sql 增删改查的一般格式和例子。

增-insert

格式:

insert into <表格名> (列名1,列名2,...,列名n) values (1,2,...,值n) 

例子:

insert into Student (name, age, address) values ('小明',18,'广东')

<表格名>替换为真实表格名称;字符串类型的值要加单引号。 例子表示插入一行数据到表格Student中,并指定了不同列的值。

删-delete

格式:

delete from <表格名> where <删除条件>

例子:

delete from Student where name='小明'

<表格名>替换为真实表格名称,<删除条件>替换为真实删除条件。 例子删除了Student表格中name列值为”小明“的行。

改-update

格式:

update <表格名> set 列名1=更新值1,列名2=更新值2,...,列名n=更新值n where <更新条件>

例子:

update Student set age=20, address='广西' where name='小明'

<表格名>替换为真实表格名称,<更新条件>替换为真实更新条件。 例子更新Student表格中name列值为”小明“的行,将age更新为20,address更新为”广西“。

查-select

格式:

select 列名1,列名2,...,列名n from <表格名> where <查询条件表达式>

例子1:

select name, age from Student where name='小明'

例子2:

select * from Student where name='小明'

<表格名>替换为真实表格名称,<查询条件表达式>替换为真实查询条件表达式。 例子1查询新Student表格中name列值为”小明“的行,其中,只返回name,age两列的值。 例子2查询新Student表格中name列值为”小明“的行,其中,返回所有列的值。

python格式化输出

python 的格式化输出,与其他语言的格式化输出,在语法上不太一样。

区别是,python 使用 % 符号连接字符串和变量,其他语言一般是使用,逗号符号连接字符串和变量。如果不注意,容易手滑打错,还很难检查出来。

正确示范:

name = "Li hua"
age = 24
print("Hello %s, you are %d years old" % (name, age))

错误示范:

name = "Li hua"
age = 24
print("Hello %s, you are %d years old", (name, age))

持续更新中……