wheel fix 1
Browse files- Dockerfile +0 -8
- models.py +35 -9
- requirements.txt +6 -1
Dockerfile
CHANGED
|
@@ -1,8 +1,6 @@
|
|
| 1 |
FROM python:3.11-slim
|
| 2 |
|
| 3 |
-
# Устанавливаем только нужное для сборки + OpenBLAS
|
| 4 |
RUN apt-get update && apt-get install -y --no-install-recommends \
|
| 5 |
-
build-essential \
|
| 6 |
libopenblas-dev \
|
| 7 |
&& rm -rf /var/lib/apt/lists/*
|
| 8 |
|
|
@@ -17,12 +15,6 @@ WORKDIR $HOME/app
|
|
| 17 |
COPY --chown=user requirements.txt .
|
| 18 |
RUN pip install --no-cache-dir --user -r requirements.txt
|
| 19 |
|
| 20 |
-
# Компиляция llama-cpp-python с OpenBLAS
|
| 21 |
-
RUN CMAKE_ARGS="-DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS" \
|
| 22 |
-
FORCE_CMAKE=1 \
|
| 23 |
-
pip install --no-cache-dir --user llama-cpp-python --upgrade --force-reinstall --no-cache-dir
|
| 24 |
-
|
| 25 |
-
# Копируем код и модель (если скачал в weights/)
|
| 26 |
COPY --chown=user . .
|
| 27 |
|
| 28 |
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "1"]
|
|
|
|
| 1 |
FROM python:3.11-slim
|
| 2 |
|
|
|
|
| 3 |
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
|
| 4 |
libopenblas-dev \
|
| 5 |
&& rm -rf /var/lib/apt/lists/*
|
| 6 |
|
|
|
|
| 15 |
COPY --chown=user requirements.txt .
|
| 16 |
RUN pip install --no-cache-dir --user -r requirements.txt
|
| 17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
COPY --chown=user . .
|
| 19 |
|
| 20 |
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "1"]
|
models.py
CHANGED
|
@@ -1,19 +1,45 @@
|
|
| 1 |
from llama_cpp import Llama
|
|
|
|
|
|
|
| 2 |
|
| 3 |
-
#
|
| 4 |
-
|
| 5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
|
| 7 |
llm = None
|
| 8 |
|
|
|
|
| 9 |
def load_model():
|
| 10 |
global llm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
llm = Llama(
|
| 12 |
-
model_path=
|
| 13 |
-
n_ctx=8192,
|
| 14 |
-
n_threads=0,
|
| 15 |
-
n_gpu_layers=0,
|
| 16 |
-
n_batch=512,
|
| 17 |
-
verbose=
|
| 18 |
)
|
|
|
|
|
|
|
| 19 |
return llm
|
|
|
|
| 1 |
from llama_cpp import Llama
|
| 2 |
+
from huggingface_hub import hf_hub_download
|
| 3 |
+
import os
|
| 4 |
|
| 5 |
+
# Параметры модели (Q5_K_M — хороший баланс скорость/качество на CPU)
|
| 6 |
+
REPO_ID = "bartowski/Qwen2.5-7B-Instruct-GGUF"
|
| 7 |
+
FILENAME = "Qwen2.5-7B-Instruct-Q5_K_M.gguf" # если хочешь другой квант — Q4_K_M (быстрее), Q6_K (лучше качество)
|
| 8 |
+
|
| 9 |
+
# Директория кэша (в HF Spaces /tmp сохраняется между перезапусками, модель не скачивается заново)
|
| 10 |
+
CACHE_DIR = "/tmp/hf/models"
|
| 11 |
+
os.makedirs(CACHE_DIR, exist_ok=True)
|
| 12 |
|
| 13 |
llm = None
|
| 14 |
|
| 15 |
+
|
| 16 |
def load_model():
|
| 17 |
global llm
|
| 18 |
+
|
| 19 |
+
if llm is not None:
|
| 20 |
+
return llm # уже загружено — не тратим время
|
| 21 |
+
|
| 22 |
+
print(f"Скачиваем/находим модель {REPO_ID}/{FILENAME} ... (первый раз ~5–15 мин на HF CPU)")
|
| 23 |
+
|
| 24 |
+
# Скачивание (или берём из кэша, если уже есть)
|
| 25 |
+
model_path = hf_hub_download(
|
| 26 |
+
repo_id=REPO_ID,
|
| 27 |
+
filename=FILENAME,
|
| 28 |
+
cache_dir=CACHE_DIR,
|
| 29 |
+
local_dir=CACHE_DIR, # сохраняем явно
|
| 30 |
+
local_dir_use_symlinks=False # без ссылок, чтобы файл был физически
|
| 31 |
+
)
|
| 32 |
+
|
| 33 |
+
print(f"Путь к модели: {model_path}")
|
| 34 |
+
|
| 35 |
llm = Llama(
|
| 36 |
+
model_path=model_path,
|
| 37 |
+
n_ctx=8192, # контекст — достаточно для длинных описаний + промпта
|
| 38 |
+
n_threads=0, # все доступные ядра CPU
|
| 39 |
+
n_gpu_layers=0, # строго CPU
|
| 40 |
+
n_batch=512,
|
| 41 |
+
verbose=True # логи в консоль Spaces — увидишь токены/сек
|
| 42 |
)
|
| 43 |
+
|
| 44 |
+
print("Модель Qwen2.5-7B-Instruct успешно загружена в CPU-режиме")
|
| 45 |
return llm
|
requirements.txt
CHANGED
|
@@ -1,4 +1,9 @@
|
|
| 1 |
fastapi>=0.115.0
|
| 2 |
uvicorn[standard]>=0.30.0
|
| 3 |
pydantic>=2.8.0
|
| 4 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
fastapi>=0.115.0
|
| 2 |
uvicorn[standard]>=0.30.0
|
| 3 |
pydantic>=2.8.0
|
| 4 |
+
|
| 5 |
+
# Предкомпилированный wheel для HF Spaces CPU (Luigi — свежий на январь 2026, с OpenBLAS)
|
| 6 |
+
https://huggingface.co/Luigi/llama-cpp-python-wheels-hf-spaces-free-cpu/resolve/main/llama_cpp_python-0.3.22-cp311-cp311-linux_x86_64.whl
|
| 7 |
+
|
| 8 |
+
# Для скачивания модели
|
| 9 |
+
huggingface-hub>=0.20.0
|