# graphlite **Repository Path**: kevin365/graphlite ## Basic Information - **Project Name**: graphlite - **Description**: 轻量级图接口调用SuperKernel - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-16 - **Last Updated**: 2025-09-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 基于图转换为SuperKernel编译并执行的套件 ### 1. SuperKernel编译接口 ``` sk = AscendSk('x') sk.compile(graph_info, out_dir, soc, options) ``` *graph_info*: 输入的图信息 *out_dir*: 编译结果输出目录 *soc*: 芯片型号 *options*: 编译选项, `stream-fusion=[1,0]`打开双流融合 **输入的图信息样例** ``` [ {'op_type': 'Add_1', 'stream_id': 1, 'params': [{'shape': [1024, 768], 'ori_shape': [1024, 768], 'format': 'ND', 'ori_format': 'ND', 'dtype': 'float16'}, {'shape': [1024, 768], 'ori_shape': [1024, 768], 'format': 'ND', 'ori_format': 'ND', 'dtype': 'float16'}, {'shape': [1024, 768], 'ori_shape': [1024, 768], 'format': 'ND', 'ori_format': 'ND', 'dtype': 'float16'}] }, {'op_type': 'EVENT.SEND', 'stream_id': 1, 'event_id': 2 } ] ``` **图信息分为两种,op和event** **其中op格式的字段** *op_type: str*, 算子的类型,对应Ascend算子就是对应的OpType *stream_id: int*, 图上的流ID,用来组织算子的串并行执行顺序,同一条流上算子串行执行 *params: list*, 算子编译参数, 分为input、output、attrs,其中input/output是一个tensor的描述,属性是具体类型对应的数值,是否有属性参考算子实现 **其中event的字段** *op_type: str*,EVENT.SEND外发事件/EVENT.RECV等待事件 *stream_id: int*, 图上的流ID,表示event执行所在的流 *event_id: int*,事件id,相同的ID是配对关系,用来控制顺序,RECV需要等SEND执行后才能激活 ### 2. GraphLite提供的接口 ``` x1 = Tensorl('x1', 'float16', [1024, 768]) x2 = Tensorl('x2', 'float16', [1024, 768]) with GraphlCtx('test') as graph: print('graph ctx') ev1 = event_create() with StreamlCtx(1) as steam_id: y1 = add_1(x1, x2) event_notify(ev1) ``` **图的基本接口说明** *Tensorl*: 创建tensor,入参包括名字、数据类型、shape *GraphlCtx*: 构造一个图的上下文,该上下文的操作都在一张图上 *StreamlCtx*: 构造一个流的上下文,该上下文的操作都在当前的流上,默认都在0号流 *Event_create*: 创建一个事件 *Event_notify*: 发送事件 *Event_wait*: 等待事件 *Ops*: 如add_1、add、rms_norm这类API是基于图开发的算子,这部分可以参考ops目录下的算子实现部分 ### 3. Runner工具提供的接口 ``` runner = Runnerl(graph) graph_info = runner.save_graph_info() # dump graph obj, jsn = sk.compile(graph_info, sk_out, 'Ascend910_9391') # compile sk workspaces = sk.get_workspaces() # get workspaces runner.run(obj, jsn, workspaces, work_dir) # run sk ``` **运行时工具基本接口** *Runnerl*: 创建一个运行工具类,输入是一个图graphlite对象 *Runnerl.save_graph_info*: 将图导出为SuperKernel编译需要的图信息 *Runnerl.run(obj, jsn, workspaces, work_dir)*: 根据编译结果执行SuperKernel ### 4. 代码样例 ``` testcase.py ``` ### 5. 调用流程图 ![SuperKernel和图和编译运行之间的关系](docs/sklite_arch.svg)