当前位置:   article > 正文

基于LLM的优化器_sparkai.llm.llm

sparkai.llm.llm

基于LLM的优化器


需求描述:
我准备用二台8卡的GPU服务器训练一个LLM模型,因为不同的超参会导致不同的性能.我准备了一个脚本,输入一些参数,会运行训练脚本,之后输出tokens/sec,这个值越大越好。
你现在是一个优化器,我告诉你有哪些输入参数,以及它们值的范围,你输出参数列表,之后我利用你提供的参数列表运行训练脚本,得到tokens/sec,并将这个值反馈给你
你根据我的反馈思考如何配置这些参数,可以让tokens/sec最大
通过这样不断的迭代,求出近似最优解
参数
1.HL_DP
2.HL_TP
3.HL_PP
4.HL_ZERO_STAGE
参数约束:
1.HL_DP HL_TPHL_PP==16
2.HL_ZERO_STAGE取值范围是[0,1,2]
3.HL_ZERO_STAGE=2时HL_PP为1
输出格式:
[HL_DP=?,HL_TP=?,HL_PP=?,HL_ZERO_STAGE=?]
明白我的要求了吗?

代码

from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessage
import random
import time
import re
SPARKAI_URL = 'wss://spark-api.xf-yun.com/v3.5/chat'
SPARKAI_APP_ID = ''
SPARKAI_API_SECRET = ''
SPARKAI_API_KEY = ''
SPARKAI_DOMAIN = 'generalv3.5'
def run_script(params):
    print("params:",params)
    return random.randint(0,200)
if __name__ == '__main__':
    request='''
我准备用二台8卡的GPU服务器训练一个LLM模型,因为不同的超参会导致不同的性能.我准备了一个脚本,输入一些参数,会运行训练脚本,之后输出tokens/sec,这个值越大越好。
你现在是一个优化器,我告诉你有哪些输入参数,以及它们值的范围,你输出参数列表,之后我利用你提供的参数列表运行训练脚本,得到tokens/sec,并将这个值反馈给你
你根据我的反馈思考如何配置这些参数,可以让tokens/sec最大
通过这样不断的迭代,求出近似最优解
参数
1.HL_DP
2.HL_TP
3.HL_PP
4.HL_ZERO_STAGE
参数约束:
1.HL_DP*HL_TP*HL_PP==16
2.HL_ZERO_STAGE取值范围是[0,1,2]
3.HL_ZERO_STAGE=2时HL_PP为1
输出格式:
[HL_DP=?,HL_TP=?,HL_PP=?,HL_ZERO_STAGE=?]
明白我的要求了吗?
'''
    spark = ChatSparkLLM(
        spark_api_url=SPARKAI_URL,
        spark_app_id=SPARKAI_APP_ID,
        spark_api_key=SPARKAI_API_KEY,
        spark_api_secret=SPARKAI_API_SECRET,
        spark_llm_domain=SPARKAI_DOMAIN,
        streaming=False,
        top_k=1,
        temperature=0.3
    )
    messages = [ChatMessage(
                    role="user",
                    content=request)]                    
    handler = ChunkPrintHandler()
    for i in range(10):
        print(f"\n第{i}轮")
        a = spark.generate([messages], callbacks=[handler])    
        messages.append(a.generations[0][0].message)
        out=a.generations[0][0].text
        print(out)
        params=re.findall(r'\[(.*?)\]',out)[0]        
        messages.append(ChatMessage(
            role="user",
            content=f"tokens/sec:{run_script(params)}"))
        time.sleep(2)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

输出

第0轮
明白了,根据您的要求,我将为您提供一个参数列表。您可以使用这个参数列表运行训练脚本,并将得到的tokens/sec值反馈给我。我会根据您的反馈来调整参数,以使tokens/sec值最大。

参数列表:
[HL_DP=2, HL_TP=2, HL_PP=2, HL_ZERO_STAGE=1]

请使用这个参数列表运行训练脚本,并告诉我得到的tokens/sec值。
params: HL_DP=2, HL_TP=2, HL_PP=2, HL_ZERO_STAGE=1

第1轮
好的,根据您提供的tokens/sec值108,我会尝试调整参数以优化性能。

新的参数列表:
[HL_DP=4, HL_TP=2, HL_PP=2, HL_ZERO_STAGE=1]

请使用这个新的参数列表运行训练脚本,并告诉我得到的tokens/sec值。
params: HL_DP=4, HL_TP=2, HL_PP=2, HL_ZERO_STAGE=1

第2轮
好的,根据您提供的tokens/sec值134,我会尝试进一步调整参数以优化性能。

新的参数列表:
[HL_DP=4, HL_TP=2, HL_PP=4, HL_ZERO_STAGE=1]

请使用这个新的参数列表运行训练脚本,并告诉我得到的tokens/sec值。
params: HL_DP=4, HL_TP=2, HL_PP=4, HL_ZERO_STAGE=1

第3轮
好的,根据您提供的tokens/sec值115,我会尝试进一步调整参数以优化性能。

新的参数列表:
[HL_DP=4, HL_TP=2, HL_PP=4, HL_ZERO_STAGE=2]

请使用这个新的参数列表运行训练脚本,并告诉我得到的tokens/sec值。
params: HL_DP=4, HL_TP=2, HL_PP=4, HL_ZERO_STAGE=2

第4轮
好的,根据您提供的tokens/sec值75,我会尝试进一步调整参数以优化性能。

新的参数列表:
[HL_DP=4, HL_TP=4, HL_PP=2, HL_ZERO_STAGE=1]

请使用这个新的参数列表运行训练脚本,并告诉我得到的tokens/sec值。
params: HL_DP=4, HL_TP=4, HL_PP=2, HL_ZERO_STAGE=1

第5轮
好的,根据您提供的tokens/sec值43,我会尝试进一步调整参数以优化性能。

新的参数列表:
[HL_DP=8, HL_TP=2, HL_PP=1, HL_ZERO_STAGE=1]

请使用这个新的参数列表运行训练脚本,并告诉我得到的tokens/sec值。
params: HL_DP=8, HL_TP=2, HL_PP=1, HL_ZERO_STAGE=1

第6轮
好的,根据您提供的tokens/sec值128,我会尝试进一步调整参数以优化性能。

新的参数列表:
[HL_DP=8, HL_TP=2, HL_PP=2, HL_ZERO_STAGE=1]

请使用这个新的参数列表运行训练脚本,并告诉我得到的tokens/sec值。
params: HL_DP=8, HL_TP=2, HL_PP=2, HL_ZERO_STAGE=1

第7轮
好的,根据您提供的tokens/sec值188,我会尝试进一步调整参数以优化性能。

新的参数列表:
[HL_DP=8, HL_TP=2, HL_PP=4, HL_ZERO_STAGE=1]

请使用这个新的参数列表运行训练脚本,并告诉我得到的tokens/sec值。
params: HL_DP=8, HL_TP=2, HL_PP=4, HL_ZERO_STAGE=1

第8轮
好的,根据您提供的tokens/sec值137,我会尝试进一步调整参数以优化性能。

新的参数列表:
[HL_DP=8, HL_TP=2, HL_PP=4, HL_ZERO_STAGE=2]

请使用这个新的参数列表运行训练脚本,并告诉我得到的tokens/sec值。
params: HL_DP=8, HL_TP=2, HL_PP=4, HL_ZERO_STAGE=2

第9轮
好的,根据您提供的tokens/sec值198,我会尝试进一步调整参数以优化性能。

新的参数列表:
[HL_DP=8, HL_TP=4, HL_PP=2, HL_ZERO_STAGE=1]

请使用这个新的参数列表运行训练脚本,并告诉我得到的tokens/sec值。
params: HL_DP=8, HL_TP=4, HL_PP=2, HL_ZERO_STAGE=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/994745
推荐阅读
相关标签
  

闽ICP备14008679号