--- 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) ````