初始化项目,由ModelHub XC社区提供模型
Model: XXXiong/ChatHLS-HLSTuner Source: Original Platform
This commit is contained in:
167
README.md
Normal file
167
README.md
Normal file
@@ -0,0 +1,167 @@
|
||||
---
|
||||
license: apache-2.0
|
||||
pipeline_tag: text-generation
|
||||
tags:
|
||||
- chat
|
||||
- llm
|
||||
- safetensors
|
||||
base_model: Qwen/Qwen2.5-14B-Instruct
|
||||
language:
|
||||
- en
|
||||
---
|
||||
|
||||
# ChatHLS-HLSTuner
|
||||
|
||||
## Model Details
|
||||
|
||||
- **Finetuned from model:** `Qwen/Qwen2.5-Coder-14B-Instruct`
|
||||
- **Model source paper:** [ChatHLS: Towards Systematic Design Automation and Optimization for High-Level Synthesis](https://aclanthology.org/2026.acl-long.962/)
|
||||
- **Project repository:** [GEAR-SEU/ChatHLS-ACL-26](https://github.com/GEAR-SEU/ChatHLS-ACL-26)
|
||||
|
||||
## Description
|
||||
|
||||
**ChatHLS-HLSTuner** is a specialized Large Language Model fine-tuned for High-Level Synthesis (HLS) C/C++ code optimization. It acts as the optimization analysis agent within the ChatHLS framework.
|
||||
|
||||
## Quickstart
|
||||
|
||||
### Prerequisites
|
||||
```bash
|
||||
pip install transformers torch accelerate
|
||||
```
|
||||
|
||||
### Example
|
||||
|
||||
Here is a simple example of how to format your prompt and generate optimization analysis for HLS code:
|
||||
|
||||
````python
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
import torch
|
||||
|
||||
model_name = "XXXiong/ChatHLS-HLSTuner"
|
||||
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
||||
model = AutoModelForCausalLM.from_pretrained(
|
||||
model_name,
|
||||
torch_dtype=torch.bfloat16,
|
||||
device_map="auto"
|
||||
)
|
||||
|
||||
hls_code = """
|
||||
#include "ap_fixed.h"
|
||||
#include "hls_math.h"
|
||||
|
||||
typedef ap_fixed<32,16> t_ap_fixed;
|
||||
|
||||
void gemm(
|
||||
t_ap_fixed alpha,
|
||||
t_ap_fixed beta,
|
||||
t_ap_fixed C[ 20 + 0][25 + 0],
|
||||
t_ap_fixed A[ 20 + 0][30 + 0],
|
||||
t_ap_fixed B[ 30 + 0][25 + 0])
|
||||
{
|
||||
#pragma HLS top name=gemm
|
||||
|
||||
const int ni = 20;
|
||||
const int nj = 25;
|
||||
const int nk = 30;
|
||||
|
||||
int i, j, k;
|
||||
L1: for (i = 0; i < ni; i++) {
|
||||
L2: for (j = 0; j < nj; j++)
|
||||
C[i][j] *= beta;
|
||||
L3: for (k = 0; k < nk; k++) {
|
||||
L4: for (j = 0; j < nj; j++)
|
||||
C[i][j] += alpha * A[i][k] * B[k][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
hls_code_ppa = """
|
||||
latency: 15661 cycles
|
||||
util_dsp: 10.5%
|
||||
util_ff: 0.4%
|
||||
util_lut: 2.1%
|
||||
"""
|
||||
|
||||
loop_array_info = """
|
||||
kernel_gemm
|
||||
L1,loop,20
|
||||
L2,loop,25
|
||||
L3,loop,30
|
||||
L4,loop,25
|
||||
C,array,20/25
|
||||
A,array,20/30
|
||||
B,array,30/25
|
||||
"""
|
||||
|
||||
prompt = f"""Your task is to optimize the following HLS kernel by inserting `#pragma` directives
|
||||
to enhance loops and arrays for lower latency and relatively low resource utilization.
|
||||
You may use the following pragma types:
|
||||
|
||||
- Loop Pipeline
|
||||
- Loop Unroll
|
||||
- Array Partition
|
||||
|
||||
Provided code:
|
||||
{hls_code}
|
||||
|
||||
Current latency and hardware resource utilization:
|
||||
{hls_code_ppa}
|
||||
|
||||
Loop and array information:
|
||||
{loop_array_info}
|
||||
|
||||
Please suggest pragma modifications, specifying where to insert them and the reasoning behind each.
|
||||
Provide only the suggestions without additional explanations or formatting.
|
||||
|
||||
**Expected Output Format**:
|
||||
|
||||
Detailed Reasoning:
|
||||
```text
|
||||
[Your step-by-step analysis here]
|
||||
```
|
||||
|
||||
Optimization Strategies:
|
||||
```json
|
||||
{{
|
||||
"Optimization Strategies": [
|
||||
{{
|
||||
"Code Segment Before Optimization (Loop/Array)": "[Code line before optimization]",
|
||||
"Code Segment After Optimization (Loop/Array)": "[Code line after inserting the pragma]",
|
||||
"Reason": "[Explanation of why this pragma was inserted]",
|
||||
"Result Analysis": {{
|
||||
"Impact of Inserting This Pragma on PPA": "[Description of the impact on Performance, Power, and Area]",
|
||||
"Reason": "[Explanation of why this impact occurred based on the performance analysis]"
|
||||
}}
|
||||
}}
|
||||
]
|
||||
}}
|
||||
```
|
||||
"""
|
||||
|
||||
messages = [
|
||||
{"role": "system", "content": """You are an expert proficient in HLS algorithm optimization,
|
||||
improving algorithm PPA through inserting pragmas into arrays and loops in HLS code."""},
|
||||
{"role": "user", "content": prompt}
|
||||
]
|
||||
|
||||
text = tokenizer.apply_chat_template(
|
||||
messages,
|
||||
tokenize=False,
|
||||
add_generation_prompt=True
|
||||
)
|
||||
|
||||
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
||||
|
||||
generated_ids = model.generate(
|
||||
**model_inputs,
|
||||
max_new_tokens=2048,
|
||||
temperature=0.7
|
||||
)
|
||||
generated_ids = [
|
||||
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
||||
]
|
||||
|
||||
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
|
||||
print(response)
|
||||
````
|
||||
Reference in New Issue
Block a user