---
license_link: https://huggingface.co/Qwen/Qwen2.5-7B-Instruct/blob/main/LICENSE
pipeline_tag: text-generation
base_model:
- Qwen/Qwen2.5-7B-Instruct
base_model_relation: quantized
tags:
- ctranslate2
- Qwen2.5
- chat
---
Conversion of https://huggingface.co/Qwen/Qwen2.5-7B-Instruct into the ```ctranslate2``` format using ```int8``` quantization.

NOTE #1: This requires a version of ```ctranslate2``` GREATER THAN 4.5.0.

NOTE #2: The sample scripts below require ```pip``` installing the necessary ```CUDA``` and ```CUDNN``` libraries.  If you rely on a systemwide installation instead, adjust your code accordingly.

Requirements:

- torch 2.4.0+cu124
- nvidia-cublas-cu12 12.4.2.65
- nvidia-cuda-nvrtc-cu12 12.4.99
- nvidia-cuda-runtime-cu12 12.4.99
- nvidia-cudnn-cu12 9.1.0.70
- numpy==1.26.4 (YOU MUST DOWNGRADE FROM THE NUMPY VERSION THAT CTRANSLATE2 INSTALLS BY DEFAULT)
- All other traditional dependencies like ```transformers```, ```accelerate```, etc.

<details><summary>Sample Script #1 (non-streaming):</summary>

```Python
import sys
import os
os.environ['KMP_DUPLICATE_LIB_OK']='TRUE'
from pathlib import Path

def set_cuda_paths():
    venv_base = Path(sys.executable).parent.parent
    nvidia_base_path = venv_base / 'Lib' / 'site-packages' / 'nvidia'
    cuda_path = nvidia_base_path / 'cuda_runtime' / 'bin'
    cublas_path = nvidia_base_path / 'cublas' / 'bin'
    cudnn_path = nvidia_base_path / 'cudnn' / 'bin'
    nvrtc_path = nvidia_base_path / 'cuda_nvrtc' / 'bin'
    
    paths_to_add = [
        str(cuda_path),
        str(cublas_path),
        str(cudnn_path),
        str(nvrtc_path),
    ]

    env_vars = ['CUDA_PATH', 'CUDA_PATH_V12_4', 'PATH']
    
    for env_var in env_vars:
        current_value = os.environ.get(env_var, '')
        new_value = os.pathsep.join(paths_to_add + [current_value] if current_value else paths_to_add)
        os.environ[env_var] = new_value

set_cuda_paths()

import ctranslate2
import gc
import torch
from transformers import AutoTokenizer
import pynvml
from constants import user_message, system_message

pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(0)

model_dir = r"[INSERT PATH TO FOLDER CONTAINING THE MODEL FILES HERE]"

def build_prompt():
    prompt = f"""<|im_start|>system
{system_message}<|im_end|>
<|im_start|>user
{user_message}<|im_end|>
<|im_start|>assistant
"""
    return prompt

def main():
    model_name = os.path.basename(model_dir)
    beam_size_value = 1
    intra_threads = max(os.cpu_count() - 4, 4)
    
    generator = ctranslate2.Generator(
        model_dir,
        device="cuda",
        compute_type="int8",
        intra_threads=intra_threads
    )
    
    tokenizer = AutoTokenizer.from_pretrained(model_dir, add_prefix_space=None)
    prompt = build_prompt()
    tokens = tokenizer.convert_ids_to_tokens(tokenizer.encode(prompt))
    
    results_batch = generator.generate_batch(
        [tokens],
        include_prompt_in_result=False,
        max_batch_size=4096,
        batch_type="tokens",
        beam_size=beam_size_value,
        num_hypotheses=1,
        max_length=512,
        sampling_temperature=0.0,
    )
    
    output = tokenizer.decode(results_batch[0].sequences_ids[0])
    print("\nGenerated response:\n")
    print(output)
    
    del generator
    del tokenizer
    torch.cuda.empty_cache()
    gc.collect()
    
if __name__ == "__main__":
    main()
```
</details>

<details><summary>Sample Script #2 (streaming)</summary>

```Python
import sys
import os
os.environ['KMP_DUPLICATE_LIB_OK']='TRUE'
from pathlib import Path

def set_cuda_paths():
    venv_base = Path(sys.executable).parent.parent
    nvidia_base_path = venv_base / 'Lib' / 'site-packages' / 'nvidia'
    cuda_path = nvidia_base_path / 'cuda_runtime' / 'bin'
    cublas_path = nvidia_base_path / 'cublas' / 'bin'
    cudnn_path = nvidia_base_path / 'cudnn' / 'bin'
    nvrtc_path = nvidia_base_path / 'cuda_nvrtc' / 'bin'
    
    paths_to_add = [
        str(cuda_path),
        str(cublas_path),
        str(cudnn_path),
        str(nvrtc_path),
    ]

    env_vars = ['CUDA_PATH', 'CUDA_PATH_V12_4', 'PATH']
    
    for env_var in env_vars:
        current_value = os.environ.get(env_var, '')
        new_value = os.pathsep.join(paths_to_add + [current_value] if current_value else paths_to_add)
        os.environ[env_var] = new_value

set_cuda_paths()

import ctranslate2
import gc
import torch
from transformers import AutoTokenizer
import pynvml
from constants import user_message, system_message

pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(0)

model_dir = r"[PATH TO FOLDER CONTAINING THE MODEL FILES]"


def build_prompt():
    prompt = f"""<|im_start|>system
{system_message}<|im_end|>
<|im_start|>user
{user_message}<|im_end|>
<|im_start|>assistant
"""
    return prompt

def main():
    generator = ctranslate2.Generator(
        model_dir,
        device="cuda",
        compute_type="int8",
    )
    
    tokenizer = AutoTokenizer.from_pretrained(model_dir)
    prompt = build_prompt()
    tokens = tokenizer.convert_ids_to_tokens(tokenizer.encode(prompt))
    
    # Initialize token iterator
    token_iterator = generator.generate_tokens(
        [tokens],
        max_length=512,
        sampling_temperature=0.0
    )
    
    decoded_output = ""
    tokens_buffer = []
    
    try:
        for token_result in token_iterator:
            token_id = token_result.token_id
            token = tokenizer.convert_ids_to_tokens(token_id)
            
            if token_id == tokenizer.eos_token_id:
                break
                
            is_new_word = token.startswith("Ġ")
            if is_new_word and tokens_buffer:
                word = tokenizer.decode(tokens_buffer)
                print(word, end='', flush=True)
                decoded_output += word
                tokens_buffer = []
                
            tokens_buffer.append(token_id)
        
        if tokens_buffer:
            word = tokenizer.decode(tokens_buffer)
            print(word, end='', flush=True)
            decoded_output += word
            
    except KeyboardInterrupt:
        print("\nGeneration interrupted")
        
    del generator
    del tokenizer
    torch.cuda.empty_cache()
    gc.collect()
    
if __name__ == "__main__":
    main()
```
</details>