Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
Auto-sync from GitHub Actions
Browse files- core/engine.py +34 -5
- ui_nicegui.py +12 -1
core/engine.py
CHANGED
|
@@ -25,7 +25,8 @@ import jieba
|
|
| 25 |
import numpy as np
|
| 26 |
import pandas as pd
|
| 27 |
import torch
|
| 28 |
-
from safetensors.torch import
|
|
|
|
| 29 |
from sentence_transformers import SentenceTransformer
|
| 30 |
|
| 31 |
from .models import SearchRequest, SearchResponse, TagResult
|
|
@@ -699,11 +700,39 @@ class DanbooruTagger:
|
|
| 699 |
print(f'[Engine] ็ผๅญไฟๅญๅฎๆ๏ผ{len(self.df)} ๆก่ฎฐๅฝ๏ผ๏ผ็ๆๆถ้ด: {current_time}')
|
| 700 |
|
| 701 |
def _load_from_cache(self) -> None:
|
| 702 |
-
|
| 703 |
-
|
| 704 |
-
|
| 705 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 706 |
self.max_log_count = float(np.log1p(self.df['post_count'].max()))
|
|
|
|
|
|
|
|
|
|
| 707 |
|
| 708 |
def _cached_schema_version(self) -> int:
|
| 709 |
try:
|
|
|
|
| 25 |
import numpy as np
|
| 26 |
import pandas as pd
|
| 27 |
import torch
|
| 28 |
+
from safetensors.torch import save_file as st_save
|
| 29 |
+
from safetensors import safe_open
|
| 30 |
from sentence_transformers import SentenceTransformer
|
| 31 |
|
| 32 |
from .models import SearchRequest, SearchResponse, TagResult
|
|
|
|
| 700 |
print(f'[Engine] ็ผๅญไฟๅญๅฎๆ๏ผ{len(self.df)} ๆก่ฎฐๅฝ๏ผ๏ผ็ๆๆถ้ด: {current_time}')
|
| 701 |
|
| 702 |
def _load_from_cache(self) -> None:
|
| 703 |
+
t0 = time.time()
|
| 704 |
+
emb_path = str(self.paths.embeddings)
|
| 705 |
+
meta_path = str(self.paths.metadata)
|
| 706 |
+
emb_size_mb = self.paths.embeddings.stat().st_size / 1024 / 1024
|
| 707 |
+
meta_size_mb = self.paths.metadata.stat().st_size / 1024 / 1024
|
| 708 |
+
|
| 709 |
+
# โโ ๆญฅ้ชค 1/3: embedding ๆไปถ๏ผ้ๅฑๅ ่ฝฝไปฅๆพ็คบ่ฟๅบฆ๏ผโโโโโโโโโโโโโโโโโ
|
| 710 |
+
n_layers = len(_LAYER_SPEC)
|
| 711 |
+
print(f' [1/3] ๅ ่ฝฝ embedding ({emb_size_mb:.0f} MB, {n_layers} ๅฑ) ...')
|
| 712 |
+
with safe_open(emb_path, framework="pt", device=self.device) as f:
|
| 713 |
+
for i, (name, attr, _) in enumerate(_LAYER_SPEC, 1):
|
| 714 |
+
shape = f.get_shape(attr)
|
| 715 |
+
shape_str = 'ร'.join(str(d) for d in shape)
|
| 716 |
+
print(f' [{i}/{n_layers}] {attr:12s} ({shape_str}) ...', end=' ', flush=True)
|
| 717 |
+
_t = time.time()
|
| 718 |
+
tensor = f.get_tensor(attr)
|
| 719 |
+
setattr(self, attr, tensor.float())
|
| 720 |
+
print(f'โ {time.time() - _t:.1f}s')
|
| 721 |
+
print(f' [1/3] โ {time.time() - t0:.1f}s')
|
| 722 |
+
|
| 723 |
+
# โโ ๆญฅ้ชค 2/3: ๅ
ๆฐๆฎ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 724 |
+
print(f' [2/3] ๅ ่ฝฝๅ
ๆฐๆฎ ({meta_size_mb:.0f} MB) ...', end=' ', flush=True)
|
| 725 |
+
_t = time.time()
|
| 726 |
+
self.df = pd.read_parquet(meta_path)
|
| 727 |
+
print(f'โ {time.time() - _t:.1f}s ({len(self.df):,} ๆก)')
|
| 728 |
+
|
| 729 |
+
# โโ ๆญฅ้ชค 3/3: ็ป่ฎกไฟกๆฏ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 730 |
+
print(f' [3/3] ่ฎก็ฎ็ป่ฎกไฟกๆฏ ...', end=' ', flush=True)
|
| 731 |
+
_t = time.time()
|
| 732 |
self.max_log_count = float(np.log1p(self.df['post_count'].max()))
|
| 733 |
+
print(f'โ {time.time() - _t:.1f}s')
|
| 734 |
+
|
| 735 |
+
print(f'[Engine] ็ผๅญๅ ่ฝฝๅฎๆ (ๆป่ๆถ {time.time() - t0:.1f}s)')
|
| 736 |
|
| 737 |
def _cached_schema_version(self) -> int:
|
| 738 |
try:
|
ui_nicegui.py
CHANGED
|
@@ -471,7 +471,18 @@ class DanbooruSearchUI:
|
|
| 471 |
with self.init_banner:
|
| 472 |
with ui.row().classes('items-center gap-3 p-2'):
|
| 473 |
ui.spinner(size='sm')
|
| 474 |
-
ui.label('ๅผๆๅๅงๅไธญ๏ผ่ฏท็จๅโฆ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 475 |
self.init_banner.set_visibility(not DanbooruTagger.is_ready())
|
| 476 |
if not DanbooruTagger.is_ready():
|
| 477 |
asyncio.ensure_future(self._hide_banner_when_ready())
|
|
|
|
| 471 |
with self.init_banner:
|
| 472 |
with ui.row().classes('items-center gap-3 p-2'):
|
| 473 |
ui.spinner(size='sm')
|
| 474 |
+
ui.label('ๅผๆๅๅงๅไธญ๏ผ่ฏท็จๅโฆ็บฆ้ 5~10 ๅ้').classes('text-sm text-blue-700')
|
| 475 |
+
from platform_utils import PLATFORM
|
| 476 |
+
_alt_url = (
|
| 477 |
+
'https://www.modelscope.cn/studios/SAkizuki/DanbooruSearchOnline'
|
| 478 |
+
if PLATFORM == 'hf' else
|
| 479 |
+
'https://huggingface.co/spaces/SAkizuki/DanbooruSearch'
|
| 480 |
+
)
|
| 481 |
+
ui.html(
|
| 482 |
+
f'ๅๅงๅๆ้ด๏ผๆจๅฏไปฅไฝฟ็จ'
|
| 483 |
+
f'<a href="{_alt_url}" target="_blank" rel="noopener noreferrer" '
|
| 484 |
+
f'class="text-blue-600 hover:text-blue-800 underline font-bold">ๅค็จๆๅก</a>'
|
| 485 |
+
).classes('text-xs text-blue-600 px-6 pb-3')
|
| 486 |
self.init_banner.set_visibility(not DanbooruTagger.is_ready())
|
| 487 |
if not DanbooruTagger.is_ready():
|
| 488 |
asyncio.ensure_future(self._hide_banner_when_ready())
|