feat(ml): auto-commit con 14 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
---
|
||||
id: 0082
|
||||
title: Compilar binario `sd` (stable-diffusion.cpp) para sdcli_generate_go_ml
|
||||
status: pendiente
|
||||
priority: media
|
||||
created: 2026-05-13
|
||||
type: feature
|
||||
related_components: [functions/ml/sdcli_generate.go, functions/ml/sdcli_resolve_binary.go, projects/imagegen]
|
||||
---
|
||||
|
||||
## Objetivo
|
||||
|
||||
Compilar el binario `sd` de [leejet/stable-diffusion.cpp](https://github.com/leejet/stable-diffusion.cpp)
|
||||
con backend CUDA en este host (WSL2 + RTX 3070) e instalarlo en `$PATH`. Habilita
|
||||
los tests reales de `sdcli_generate_go_ml` y el wrapper Go subprocess (Ola 3.C ya
|
||||
construido pero con tests en `skip` por falta de binario).
|
||||
|
||||
## Contexto
|
||||
|
||||
- Funcion Go `sdcli_resolve_binary_go_ml` busca `sd` o `sd-cli` en `$PATH`.
|
||||
- `sdcli_generate_go_ml` orquesta args via `genconfig_to_sdcli_args_go_ml`, lanza
|
||||
subproceso con `subprocess_stream_go_core`, parsea progreso con
|
||||
`sdcli_parse_progress_go_ml`, lee PNG de salida.
|
||||
- Tests `TestSdcliResolveBinary_NotFound`, `..._Hint` pasan; `TestSdcliGenerate_RequiresBinary`
|
||||
hace `t.Skip()` porque `sd` no existe en `$PATH`.
|
||||
- Backend `sdcpp_python_load_py_ml` ya validado con SD Turbo (CPU, 27s/imagen).
|
||||
El binario Go nativo deberia ser comparable o mejor con CUDA.
|
||||
|
||||
## Arquitectura
|
||||
|
||||
Archivos NUEVOS sugeridos:
|
||||
|
||||
- `bash/functions/infra/build_sd_cpp.sh` + `.md` — funcion del registry que clona y
|
||||
compila stable-diffusion.cpp con flags configurables (`-DSD_CUDA=ON`, `-DSD_FLASH_ATTN=ON`,
|
||||
`-DSD_FAST_SOFTMAX=ON`). Idempotente.
|
||||
- `bash/functions/infra/install_sd_cpp_bin.sh` + `.md` — copia el binario compilado
|
||||
a `~/.local/bin/sd` o equivalente en `$PATH`.
|
||||
|
||||
NO modificar:
|
||||
- `functions/ml/sdcli_*.go` — su contrato no cambia, solo se desbloquea el path feliz.
|
||||
|
||||
## Tareas
|
||||
|
||||
1. Compilacion
|
||||
1.1. Clonar `https://github.com/leejet/stable-diffusion.cpp` en `sources/stable-diffusion.cpp/`.
|
||||
1.2. Verificar requisitos: `cmake >= 3.18`, `gcc`, CUDA toolkit (instalable con
|
||||
`cuda_toolkit_check_bash_infra`). Si CUDA toolkit falta, instalarlo o
|
||||
documentar pasos manuales.
|
||||
1.3. Crear `bash/functions/infra/build_sd_cpp.sh` que:
|
||||
- Acepta flag `--backend cuda|cpu|vulkan`
|
||||
- cmake -B build -DSD_CUDA=ON (segun flag)
|
||||
- cmake --build build -j
|
||||
- Verifica que `build/bin/sd` o `build/sd` existe.
|
||||
1.4. Crear `bash/functions/infra/install_sd_cpp_bin.sh` que copia `sd` a
|
||||
`~/.local/bin/` y verifica `command -v sd`.
|
||||
|
||||
2. Smoke test
|
||||
2.1. Ejecutar `sd --version` desde Go: `SdcliResolveBinary("")` debe encontrarlo.
|
||||
2.2. Generar 1 imagen con SD Turbo `.safetensors` y comparar tiempo vs
|
||||
`sdcpp_python` (esperado: similar o mejor con CUDA).
|
||||
|
||||
3. Indexar
|
||||
3.1. `./fn index` y verificar 2 funciones nuevas.
|
||||
|
||||
4. Cleanup
|
||||
4.1. Re-run `CGO_ENABLED=1 go test -tags fts5 -run TestSdcliGenerate ./functions/ml/`
|
||||
— `TestSdcliGenerate_RequiresBinary` debe pasar sin skip.
|
||||
|
||||
## Ejemplo de uso
|
||||
|
||||
```bash
|
||||
fn run build_sd_cpp --backend cuda
|
||||
fn run install_sd_cpp_bin
|
||||
sd --help # ya en PATH
|
||||
./fn doctor ml # sd_cli debe pasar a "ok"
|
||||
```
|
||||
|
||||
## Decisiones
|
||||
|
||||
- **Compilar en `sources/`** (gitignored) — no commitear binario.
|
||||
- **Instalar en `~/.local/bin/`** — sin sudo, en `$PATH` por defecto en shells.
|
||||
- **Backend CUDA preferido** — esta maquina tiene RTX 3070 (8GB). CPU es fallback.
|
||||
|
||||
## Prerequisitos
|
||||
|
||||
- Issues 3.B/3.C completados (sdcpp_python + sdcli go scaffolding).
|
||||
- Modelo SD Turbo en vault (ya esta).
|
||||
|
||||
## Riesgos
|
||||
|
||||
- CUDA toolkit no instalado: `nvcc` ausente segun `fn doctor ml`. Mitigacion:
|
||||
fallback CPU (`-DSD_CUDA=OFF`) o instalar toolkit primero.
|
||||
- API rota entre versiones de `sd`: pinear release concreto (tag git) en el script.
|
||||
- Binario grande (~200MB con CUDA libs estaticas): vale, sources/ esta gitignored.
|
||||
Reference in New Issue
Block a user