File size: 1,877 Bytes
deed5a7
4e282b0
 
deed5a7
4e282b0
f831d3d
 
4e282b0
 
 
 
deed5a7
 
 
4e282b0
deed5a7
 
4e282b0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
deed5a7
4e282b0
 
 
 
 
 
deed5a7
4e282b0
 
deed5a7
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
from llama_cpp import Llama
from huggingface_hub import hf_hub_download
import os

# Параметры модели (Q5_K_M — хороший баланс скорость/качество на CPU)
REPO_ID = "bartowski/Qwen2.5-3B-Instruct-GGUF"
FILENAME = "Qwen2.5-3B-Instruct-Q5_K_M.gguf"  # если хочешь другой квант — Q4_K_M (быстрее), Q6_K (лучше качество)

# Директория кэша (в HF Spaces /tmp сохраняется между перезапусками, модель не скачивается заново)
CACHE_DIR = "/tmp/hf/models"
os.makedirs(CACHE_DIR, exist_ok=True)

llm = None


def load_model():
    global llm

    if llm is not None:
        return llm  # уже загружено — не тратим время

    print(f"Скачиваем/находим модель {REPO_ID}/{FILENAME} ... (первый раз ~5–15 мин на HF CPU)")

    # Скачивание (или берём из кэша, если уже есть)
    model_path = hf_hub_download(
        repo_id=REPO_ID,
        filename=FILENAME,
        cache_dir=CACHE_DIR,
        local_dir=CACHE_DIR,  # сохраняем явно
        local_dir_use_symlinks=False  # без ссылок, чтобы файл был физически
    )

    print(f"Путь к модели: {model_path}")

    llm = Llama(
        model_path=model_path,
        n_ctx=8192,  # контекст — достаточно для длинных описаний + промпта
        n_threads=0,  # все доступные ядра CPU
        n_gpu_layers=0,  # строго CPU
        n_batch=512,
        verbose=True  # логи в консоль Spaces — увидишь токены/сек
    )

    print("Модель Qwen2.5-7B-Instruct успешно загружена в CPU-режиме")
    return llm