the ugly org - una startup de AI, ML, LLM, machine learning y python

desu

Hoy es 1 de Octubre, por que no hacemos un poco de ML? He oido por ahi que esta de moda.

Le he pedido a perplexity que me de un par de ideas. Y he seleccionado una de las típicas. Total, todas estas startup hacen exactamente lo mismo a nivel de ingeniería, lo que algunas lo hacen mal y otras lo hacen peor, solo cambian el input, el modelo y el output.

Objetivo self-host.

Pero hasta el mas valiente de entre nosotros se teme a si mismo

Oscar Wilde

Your project idea sounds innovative and practical! Here’s a breakdown of the proposed pipeline, along with some insights and suggestions for each step:

Project Pipeline Overview

Grabar Conversación de Audio o Video:
  • Description: Capture audio or video conversations using a recording tool.
  • Considerations: Ensure you have permission to record conversations, especially if they involve multiple participants. You could use libraries like pyaudio for audio or opencv for video recording in Python.
Sacar los Silencios del Video:
  • Description: Remove silent parts from the recorded video to create a more concise version.
  • Tools: Use video editing libraries like moviepy or ffmpeg to analyze audio tracks and trim silences. This step will enhance the viewing experience by focusing on relevant content.
Con Whisper Meter Captions con Timestamps:
  • Description: Utilize OpenAI's Whisper model to generate captions with timestamps from the audio track.
    Implementation: You can use the Whisper API or run the model locally if you have the resources. Ensure that the generated captions are synced accurately with the audio timestamps for better usability.
Con los Captions Hacer Resúmenes, Capítulos y Usar los Timestamps para Volver a la Info:
  • Description: Use the generated captions to create summaries and chapters, allowing users to navigate through the conversation easily.
    Implementation:
  • Summarization: Implement a summarization model (like BART or T5) to condense the conversation into key points.
  • Chapter Creation: Identify natural breaks or topics in the conversation to create chapters based on timestamps.
    Search Functionality: Develop a search feature that allows users to find specific parts of the conversation using keywords, leveraging timestamps for quick navigation.

Additional Suggestions

  • User Interface: Consider building a user-friendly interface where users can upload videos, view summaries, and navigate through chapters easily. A web application using frameworks like Flask or Django could work well.
  • Multi-language Support: If your target audience is diverse, consider adding multi-language support for captions and summaries.
  • Data Privacy: Ensure that you comply with data privacy regulations when handling audio/video recordings, especially if they contain personal information.
    Testing and Feedback:

En anteriores capítulos hemos hecho otras cosas:

5
hda

Hey, D. Buena iniciativa. Yo tengo una idea para, mediante ml, separar en pistas las repeticiones de un audio. Me explico: una de las tareas que más tiempo consume en el posprocesado de un audio para un podcast o una declamación o lectura, es la de eliminar las repeticiones.

La idea sería hacer un plugin para audacity tal que ya sea por similitud en la onda de sonido o por la igualdad en la transcripción de la pista, segmentase la pista de audio dejando todas las repeticiones menos la última en una pista diferente. La última y lo no repetido es lo correcto que debería quedar en la pista principal.

Este es uno de los proyectitos que tengo apuntado. Igual te parece entretenido.

desu

Voy a empezar usando BentoML https://bentoml.com

Me parece bastante malo, como todo el ecosistema de python escrito por NO ingenieros para NO ingenieros. Y curiosamente viene de un early-engineer de Databricks. Vio la ventana y metió la cabeza rápido para hacerse rico a base de empresas que no tienen ni puta idea. Pero vamos, si es de Databricks ya sabéis como va jaja.

Tomando MALAS decisiones en multitud de sitios ademas de diseño "a la framework" que no te enteras de que ocurre. Y como tengas que modificar 1 sola cosa de sus por defecto... reza. I.e métricas, multiples servicios/modelos, loadbalancing... horrible!!! Todo esto a primera vista obviamente mal.

Como yo lo veo es como las ofertas de full stack, en lugar de tener 2 ingenieros pagan a 1 matao de un bootcamp. Esto es lo mismo con ML. En lugar de tener un backend y uno de ML que sepan cada uno hacer su parte, tienen a un matao de datascience, cobrando la mitad pero eh, puede poner que hace ML en su CV, pegando varios frameworks de python y rezando a Dios que todo funcione. Pero eh, que los frameworks los hacen la gente de Meta o Google!!! En meta y google no usan los frameworks nada mas para demos tontitos.

El motivo que lo voy a usar es que me interesa tirar a vLLM rápido y en teoria, que ya sabemos estos frameworks después no funciona nada, lo soportan bien. Y también me interesa iterar muy rápido el tener un producto en "prod" con métricas y logs. Ya digo, startup.


Hay que crear primero de todo un bentofile.yaml que en ningún lugar de su documentación te explican los campos que son y para que sirven. Vamos bien!

Se ve asi un ejemplo:

service: "service:Summarization"
labels:
  owner: bentoml-team
  project: gallery
include:
  - "*.py"
python:
  requirements_txt: requirements.txt

xq service:XXXX??? lo puedo cambiar el nombre? que son las labels? puedo usar las que quiera? que es el include? y las opciones de python solo puedo tener esas? nse... ni un puto spec y acabo de empezar el hello world.

Id pillando asiento porque esto es pyhton y esto es ML, todo va a ser asi. nefasto. y si, podria hacer todo esto por mi cuenta en java, go, rust o incluso pyhton a mano y tenerlo en 1 dia mejor que lo que te ofrece bento... pero bueno. confío en que para cargar los modelos me compense. de nuevo ejemplo de NO ingenieros haciendo frameworks para NO ingenieros.

Cualquier ingeniero te pone una API en prod con monitoring y logs en 1 día mejor que lo que te hara cualquier framework de python...


Sigo estoy ejecutando el quickstart y lo primero que me aparece en la consola es esto:

2024-10-01T11:38:10+0200 [WARNING] [cli] Converting 'Oscar' to lowercase: 'oscar'.
2024-10-01T11:38:11+0200 [INFO] [cli] Starting production HTTP BentoServer from "service:Oscar" listening on http://localhost:3000 (Press CTRL+C to quit)
No model was supplied, defaulted to sshleifer/distilbart-cnn-12-6 and revision a4f8f3e (https://huggingface.co/sshleifer/distilbart-cnn-12-6).
Using a pipeline without specifying a model name and revision in production is not recommended.

Using a pipeline without specifying a model name and revision in production is not recommended.!!!

Tio, por favor, si esto no es recomendado, porque no lo pones en tus ejemplos ya bien??? Soy un profesional que quiere usar tu producto dame la manera correcta de hacer las cosas no? Ahora tengo que rebuscar en la documentación... Porque esto es python y nada esta tipado y los ides se vuelven loco navegando el source...

desu

Uff tio, creo que ya voy a abandonar BentoML, es que ni media hora he estado probándolo... Al primer ctrl+c de correr el hello world me sale esto:

^C/Users/arnau/.flox/run/aarch64-darwin.default/lib/python3.12/multiprocessing/resource_tracker.py:254: UserWarning: resource_tracker: There appear to be 1 leaked semaphore objects to clean up at shutdown

There appear to be 1 leaked semaphore objects to clean up at shutdown
There appear to be 1 leaked semaphore objects to clean up at shutdown
There appear to be 1 leaked semaphore objects to clean up at shutdown
There appear to be 1 leaked semaphore objects to clean up at shutdown
There appear to be 1 leaked semaphore objects to clean up at shutdown

HAHAHAHAHAHAHAH bienvenidos a Python :laughing:

fijaros en la cantidad de bugs y el tipo de bugs que son: https://github.com/bentoml/BentoML/issues

desu

https://blog.vllm.ai/2024/09/05/perf-update.html

The HTTP API server takes 33% of the total execution time.

29% of the total execution time is spent on scheduling, including gathering the LLM results from the last step, scheduling the requests to run for the next step, and preparing these requests as inputs for the LLMs.

Finally, only 38% of the time was spent on the actual GPU execution for LLMs.

High CPU overhead. The CPU components of vLLM take a surprisingly long time. To make vLLM’s code easy to understand and contribute, we keep most of vLLM in Python and use many Python native data structures (e.g., Python Lists and Dicts). This becomes a significant overhead that causes the scheduling and data preparation time to be high.

Es decir 33% + 29% = 62% del tiempo se malgasta en código Python. Y estamos hablando que vLLM es lo mas top en rendimiento ahora mismo.

Por que no dejan de usar Python?

Es decir que los últimos 2 años en research en el backend de ML son optimizar código en Python, que yo en una semana de escribir mis cosas en Rust o Go voy a ir ya mas rápido...

Tremendo eh... Si no veis las oportunidades de startups y productos en todo esto yo no se como explicarlo mas obviamente.

2 respuestas
aren-pulid0

#5 https://www.modular.com/mojo hace un tiempo escuche de esto, puede ser lo que buscas

1 respuesta
desu

#6 Es que el python da igual.

La cuestión es que vLLM lo están usando en Meta y demás...

El tema es que hay tanto dinero para quemar y es un espacio que avanza tan rápido en el lado de las GPUs que a las empresas grandes se la pela.

Que los de la vLLM que son de Berkeley pongan a 4 estudiantes a optimizar el python y la API pues bueno, también lo hacían en Google con el Tensorflow, Jax, Tensorflow 2... etc... Hay tantos repos porque cada becario empezaba el suyo.

El tema es que no haya nadie que simplemente haga las cosas bien y fuera... Haz la API en Go y ya, que problema hay?

Solo que alguien tuviese las APIs con Go y que llamase vLLM ya seria el mejor LLM del mundo y ahorraría 2 años de trabajo a toda la sociedad.

desu

Entra en juego el tema mas critico que es la orquestación de recursos. Todos estos frameworks pretenden ser una solución que lo haga todo y todo lo haga bien. Spoiler: no hacen nada bien y todo se rompe.

Y están obsesionados con que todo el ML son LLM y hacer que todas las posibles LLM con todas sus posibles configuraciones funcionen y todo sea compatible con la API server de OpenAPI que por algún motivo ahora es el standard. Y y y, todo optimizado para cada modelo.

Están tratando de re-inventar 100 años de computación en CPU y avances y teoría para aplicarlo en GPU pero en python y todo en un framework mágico que si me das algo de dinero al mes te lo ejecuto en cloud!

Cualquier modelo de computación o procesamiento básico seria:

API => cola <= procesador

Donde cada procesador sera un recurso con su CPU + RAM + GPU dedicada. Y esto es especifico del problema a resolver. Hay modelos que requieren mas CPU, otros mas GPU, otros mas RAM para las caches...

E hilando fino, en la mayoría de casos de uso deberíamos hacer:

API => balanceador => servicio del modelo => cola <= procesador

Sorpresa, lo que se lleva haciendo desde hace +20 años para tirar procesos costosos. Porque tener el concepto de servicio, CPU bounded que per-procesa nuestros datos para optimizar los modelos, es algo que llevamos haciendo décadas.

Y si nos paramos a pensar, la manera en que todos estos frameworks resuelven los problemas no es que sea algo contemporáneo 2020s, o "a la Spark" 2010s... es que ni si quiera son "a la Map Reduce" 2000s, siendo análogos a los problemas CPU-bounded de los últimos 24 años. Todo lo contrario, pretender con tecnología y soluciones del 2000, aplicar optimizaciones del 2024!

El primer paso es tener un modelo lógico computacional 1:1 que puedas paralelizar 1:N, (map reduce), para después optimizarlo con multiples shared GPU o estrategias de usar RAM como con PagedAttention. (spark). Y finalmente podríamos entrar en hacer una solución contemporánea con arquitecturas optimizadas para modelos concretos, teniendo pasos intermedios super-optimizado para cada modelo.

Y como digo el ecosistema de ML python pretende hacer lo ultimo con un modelo computacional de los 2000, en frameworks de risa. Pero claro, te sale un paper de 2023, que hace el PagedAttention en python guarro, y resulta que te mejora un x30 la performance de OpenAPI que ese el mayor competidor del mercado. Pues la gente va como pollos sin cabeza.

Ahora el backend para ML o el MLops que algunos lo llaman, es lo mismo. Es un campo verde para quien lo quiera. Hay 0 competencia.


Ahora mismo ando pensando en este espacio. Empezar wrappeando vLLM con Go o Rust puede ser un buen inicio y ver que me encuentro. Soportando un MVP.

Podriamos trabajar en:

  • API
  • Cola
  • Servicios optimizados para algoritmos de optimización de LLMs o caches/db
  • Gestionar los recursos MLOps

De momento voy a el MVP con Rust porque ya lo probe y hugging faces. Total lo voy a tirar en CPU. Y después cuando lo tenga mirare que cosas se pueden ir modularizando bien.

desu

https://pytorch.org/blog/pytorch-native-architecture-optimization/
Novedades en pytorch que hacen lo que comento justo en post anterior jaja mejorar cosas de los modelos


lo que no entendi es este en concreto:

https://pytorch.org/blog/pytorch-native-architecture-optimization/#qat
YES BUT

https://pytorch.org/blog/quantization-aware-training/#qat-overhead

In our microbenchmarks, we found that 8da4w QAT fine-tuning is 34% slower than regular full fine-tuning. With activation checkpointing, the memory increase per GPU is around 2.35 GB. Most of these overheads are fundamental to how QAT works, though we may be able to speed up computation with torch.compile in the future.

o no entiendo bien o esto es una castaña que cuelan como avance a pesar de que tiene un overhead q no lo vas a usar nunca para quantificar nada

1 respuesta
Slowbro

#9 El texto lo explica no? Estas metiendo quant/dequant por op y por como funciona pytorch (autograd) + estas en fase de entrenamiento pues normal que sea mas lento. El objetivo del QAT es tener accuracy aceptable en modelos cuantizados y que en inferencia vuele (y pueda funcionar en la parte interesante del hw, la que opera sobre enteros). Mucho mas sano que dynamic quantization o con set de calibración.

Pd: no te interesa más darle a tinygrad con tu colega?

1 respuesta
desu

#10 son los tokens de entrenamiento o inferencia?

thank you esa era mi duda. lo he leído en diagonal.

ya he visto en una re-leida que mantiene velocidad de inferencia y tamaño del modelo.

Pd: solo me interesa poner el modelo en prod, me la pela el backend y el kernel.

1
Kike_Knoxvil
#5desu:

Por que no dejan de usar Python?

Porque te dicen que programan más rápido (al ser todo imports)
O que es más accesible para investigadores (al ser todo imports)
Etc etc etc...

Mira que Python no es malo para aprender pero para aplicaciones pesadas como estas son un tiro en el pie; vale más dedicar más tiempo y sacarlo en un sistema con mejor rendimiento para que no te coman los recursos ni los posibles bugs e incompatibilidades de estar tirando de tanta biblioteca incorporada

desu

Bueno resumen de hoy, he leído mucho sobre las herramientas cloud como sagemaker de aws (un mierdon, pero la API de tirar modelos es como debe ser al menos), he comparado el hardware de distintas GPU que se venden, he leído unos cuantos papers/blog posts de SOTA sobre optimización de LLM...

A conclusion:

Para la parte de delivery/fetch del modelo es que no veo ningún motivo para usar python. Al final cargaras el modelo optimizado y lo mandaras como mejor funcione a la GPU.

Para la otra parte de entrenamientos, testing y optimización de LLMs (quantificacion, QAT, 4bit inference) u optimizar otros modelos, todo esto al final lo compilaras con torch y te dará un modelo... (weights, tokens, configuraciones, hyper parámetros...) asi que realmente la necesidad de python es bastante pequeña.


Si analizamos features de bentoML:

  • API HTTP Rest sincrona
    • trivial
  • API HTTP Rest async para tirar tasks/jobs, es decir, una queue
    • "trivial", o muy fácil o muy dificil, pero un problema resuelto desde hace décadas
  • Asignar peticiones a CPU o GPU
    • hacer esto usando un framework seguramente es peor que tener control absoluto a nivel de linux(kernel), ya que no necesitamos tener un pool dinámico de recursos. Si tu tienes 1 GPU, no te interesa compartirlo con 2 modelos, porque vas a tener que pagar el "context switch" de cargar el modelo en memoria y ejecutar y asi... Es mucho mas simple tener 1 proceso 1 modelo 1 cpu 1 GPU (o N si tiene sentido), y que este proceso este optimizado para trabajar en batch, trabajar en singles o lo que sea.
  • Build y Container
    • Una mierdota como una casa, mejor hacerlo tu a mano
  • Model store / model registry
    • Trivial de tener y una mierda de nuevo tenerlo en el framework, si tu tienes un producto quieres tener un entendimiento COMPLETO y control COMPLETO sobre todos los modelos que uses... no vas a estar probando en prod cada dia un modelo, eso entraría dentro de la parte de entrenamiento/tunning/testing no en la parte de delivery/fetch.
  • multimodal composition, tener pipelines de multiples modelos
    • esto es un mierdon absoluto tenerlo en un framework, hacerlo a mano es 100% mas fácil, simple y eficiente.
  • distributed services, tener replicas, loadbalancing etc
    • mierdon absoluto tener esto con un framework por los motivos explicados atras debería quedar claro que es mil veces mas simple meter un loadbalancer delante que lo haga por ti!
  • testing
    • horrible, mezclando de nuevo la parte de delivery/fetch con la parte de entrenar y desarrollar un modelo
  • clientes http para servicios bentoML
    • inutil, aqui el problema es acoplar los de talles del modelo a la API rest... y luego tratar de generalizarlo en un framework
  • observability y logs
    • trivial de hacer y la verdad, lo que tienen por default es una mierda


Es una soberana gilipollez tener esto... en que momento no vas a usar todas las gpu disponibles para hacer delivery??? O vas a compartir gpu o cada modelo a una gpu, eso si. Pa que expone esto el framework? me parece tan críptico...

desu

Hoy me he liado un poco mirando modelos de ML, torch, hugging faces, vLLM y demás, no solo LLM sino transformers, encoders, decoders, un pocode todo y miraba como optimizarlos y donde están aplicando técnicas para mejorar la inferencia.

Todo se hace antes de empezar a inferir como comente el otro día. Así que por lo que respecta poner un modelo en prod importa 0.

No me he puesto a picar hoy porque esta semana me tienen que responder de una startup y no quiero calentarme da la cabeza si me tengo que poner con otro proyecto de curro. Así que de momento no picaremos nada.

Si alguien quiere contribuir con alguna idea o algo que quiere que mire que lo ponga.

desu

Hoy voy a explicar como voy a implementar la arquitectura de colas y pub/sub sin usar nada de colas ni pub/sub.

Los highlights son:

El objetivo es un sistema de ML que consumirá inputs y producirá outputs. Escalable, fácil, simple y eficiente.


Pues hoy he empezado pensando como comunicar mi API con los servicios que aplicaran machine learning. He pensado si una API http o grpc, si usar algo como redis o sqlite como cola de tareas... La conclusión que he llegado es.

  • 1) toda la pipeline la quiero asíncrona.
  • 2) como todo es asincrono, no necesito transferir datos bajo demanda, puedo ponerlos en un sitio y leer cuando se requiera. y cuando se requeira va a ser cuando el sistema pueda.
  • 3) como puedo dejarlos en un sitio y leer cuando queira, ya tengo una queue...

El usuario me subira un video o contenido a procesar por la pipeline, el contenido original lo guardo en un assets. En este caso he generado una transcription.txt porque quiero aplicar https://huggingface.co/learn/audio-course/chapter7/transcribe-meeting.

Para cada archivo, genero un id aleatorio y les asigno un consumer. Asi que mas bien que un modelo producer/consumer con colas, tenemos un modelo de actores. Porque en lugar de publicar a una queue y que los consumers elijan, directamente estoy publicando a un actor pero mediante la cola.

He decidio fijar el numero de consumers. Como cada consumer, en principio sera 1 GPU, y esta se ira bloqueando para procesar. Puedo decidir cuantos grupos tendre, porque sera el hardware de antemano. He decidio tener 2 grupos para empezar. Asi de esta manera no existe nunca problemas de concurrencia ni paralelismo. 1 gpu = 1 recurso = 1 consumer o mejor dicho 1 actor.

Y por ultimo tenemos el summarizer/consumer/actor. Leera trabajo de su cola y lo procesara. He simplificado el codigo con un while True, lo suyo es tener un watcher para no bloquear la CPU.

De esta manera movemos todo el problema de gestionar de recursos y colas a orquestación de procesos. Y la verdad, no es ningún problema... si escalamos de 2 GPU a 4 GPU tan solo tenemos que modificar el script de arranque para seleccionar para cada GPU la cola.

En conclusión, esta es una solución simple muy elegante que cubre la gran mayoría de casos de uso asíncronos. El trade-off si generalizamos con un sistema de colas donde transmitimos por cable seria tiempos de escritura en disco vs tiempos de escritura por network y durabilidad del sistema. Pero no lo veo un problema con hardware moderno hacer esto. Igualmente procesar modelos de ML ya tarda segundos. La diferencia entre escribir a disco o network no son segundos.

https://github.com/vrnvu/oscar/commit/08e04becceefc9d223e3c0fcbb5b0a77b735d816

Y obviamente, estoy funcionaria en un sistema distribuido donde los assets y colas estan "en el cloud", en lugar de fs lees por network.

desu

frontend, la idea sera que se pueda colgar audios o videos.

como la idea del diario es tener "startup", hay que tener cuanto antes el frontend y la integración e2e, y si hace falta mockear todo para que se vea bonito aunque no funcione nada.

como primero hare los modelos de summarize y tal, he puesto esto para tener un e2e funcional.

1
PhDfailer

Se usa python porque puedes tener modelos en producción con unas pocas cientos de lineas de codigo. No tiene ninguna otra explicacion o misterio.

1 respuesta
desu

#17 Se usa python porque es popular, y es popular porque se usa mucho.

Para escribir el core de las librerías toda la vida se ha hecho en C/C++ y Python solo es la API para llamarlo, como pandas o numpy.

No tiene ningún sentido.


Que opinas de la idea de proyecto? Hay algo que falte o quieras ver? Algo que haya considerado mal?

1 respuesta
PhDfailer

#18 el proyecto esta guay, pero veo que te enfocas demasiado en hacer las cosas bien, en lugar de hacerlas y ya

En una startup el objetivo no es hacer el mejor producto, si no el experimento de validación de que hay mercado para ese producto lo más rápido y con el menor coste en recursos posible.

Por eso usan python y javascript. Las herramientas estan al servicio de los experimentos rapidos. Tienes que hacer palanca en librerias y cosas ya hechas.

Otra cosa es que lo hagas como aprendizaje, pero en ese caso deberias aclararte, que quieres ser ingeniero? O fundador de una startup?

desu

Curiosa opinión. Sorprendente.

desu

Me han dicho que no sea cagado y que haga la app nativa con kotlin (android) o swift (ios).

Me parece bien.

Voy a probar Swift porque tengo un iphone, asi podemos grabar conversaciones o pasarle audios de tu mujer de whastapp y que te los resuma.

1 respuesta
PhDfailer

#21 siempre webapp, nunca mobile native en la primera iteracion

Por que te quieres quitar nicho de mercado y limitarte?

1 respuesta
laZAr0

No entiendo siendo generoso ni la mitad de lo que hablas, pero bueno, seguiré el desarrollo como he hecho con el resto de los proyectos de la ugly org. Ánimo.

desu

Tranquilos, los que hacen las librerías de ML tampoco entienden una mierda de lo que hacen:

  × No solution found when resolving dependencies:
  ╰─▶ Because the current Python version (3.12.4) does not satisfy Python>=3.7,<3.10 and huggingsound<=0.1.5 depends on
      Python>=3.7,<3.10, we can conclude that huggingsound<=0.1.5 cannot be used
/transformers/models/whisper/generation_whisper.py:496: FutureWarning: The input name `inputs` is deprecated. Please make sure to use `input_features` instead.
  warnings.warn(
You have passed task=transcribe, but also have set `forced_decoder_ids` to [[1, None], [2, 50360]] which creates a conflict. `forced_decoder_ids` will be ignored in favor of task=transcribe.
The attention mask is not set and cannot be inferred from input because pad token is same as eos token. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.

Impresionante, la propia libreria tiene warnings que en lugar de arreglar te tira o hace defaults... menudos fperos

1 respuesta
covaga

#22 por curiosidad, que ventajas hay?

desu

trato de hacer una PR a hugging faces:

(.venv) flox [default] ➜  transformers git:(generation-whisper) uv pip install -e ".[dev]"
  × No solution found when resolving dependencies:
  ╰─▶ Because decord==0.6.0 has no wheels are available with a matching Python ABI and transformers[dev]==4.46.0.dev0 depends on
      decord==0.6.0, we can conclude that transformers[dev]==4.46.0.dev0 cannot be used.
      And because only transformers[dev]==4.46.0.dev0 is available and you require transformers[dev], we can conclude that the
      requirements are unsatisfiable.

no les va ni els install de dev...

el motivo es que decord, una libreria python que no aporta nada, solo otro wrapper... solo soporta python 3.8 mac, vamos por python 3.12

https://github.com/dmlc/decord
3 años abandonado

esta libreria solo se usa en 1 caso:
https://github.com/huggingface/transformers/blob/main/src/transformers/models/git/convert_git_to_pytorch.py#L196

Kaledros

Justo me acabo de topar con esto mirando una cosa de Go: https://go.dev/blog/llmpowered

desu

3 años que llevan las build rota para los macbook sillicon y tiene que venir el de siempre, a arreglarlo:

https://github.com/huggingface/transformers/pull/33987

3 años y no lo han arreglado, por 1 funcion!! mirad mi PR, lo habian arreglado en todos lados menos en 1 funcion!!! de locos

me da igual si me la mergean o no, si me he dejado cosas, que otro maintainer lo arregle xq tio, es literal una hora o dos de trabajo... depende de si se tienen que re-generar todos los tests porque en local me fallaban... pero me fallaba el codigo original!!! jaja osea que ese codigo sospecho que no lo corre nadie

Edit: funcoina todo pero fallan 3 tests de cosas de modelso que yo no he tocado y deberian funcionar... asique ya veremos si me lo arreglan el lunes.

desu

Bueno, empezamos a tener cositas, tirando la gpu del mac, unos 10mib, madre mia lo que tardaaaaa:

uv run main.py 19.98s user 11.47s system 27% cpu 1:53.21 total

Hubo un día en el que yo tenía muchas ganas de verla porque yo estaba muy enamorado, ¿vale? Yo creo que ella nunca estuvo tan enamorada como yo estuve de ella, ¿vale? Estábamos en 2011 y yo justo acababa de tener una relación con una expareja mía también. Y lo dejé todo para estar con ella, porque estaba muy enamorado de ella, ¿vale? Fue el mayor momento de vulnerabilidad de mi vida. Nunca en mi vida he estado tan enamorado y no creo, fíjate lo que te digo, que nunca lo vaya a volver a estar de la misma manera. Fue la primera vez en mi vida que estuve realmente enamorado y en el que sentí que realmente estaba completamente, estaba totalmente vulnerable ante cualquier cosa que hiciese. Podía jugar conmigo, si quisiese. Recuerdo como algo bonito, aunque realmente no lo era tanto. Realmente fue mucho más un tormento que un... A ver, no, fue... ¿Qué es para mí el amor? ¿Una sonrisa o una lágrima? Las dos cosas, ¿no? Me acuerdo que estuvimos casi un año y... La dejé dejándola de hablar. Porque un día, por la noche, un día que salí por la noche, me acuerdo que yo me moría de ganas de verla. Pero no tenía el valor de decirle, oye tal, quiero estar contigo un rato. Que dejes de estar con tus amigas un rato y que estés un rato conmigo, porque tengo muchas ganas de estar contigo, pero yo no quería hacer eso, porque no quería ser posesivo o no quería, no quería que una persona no me gusta que la gente cambie de planes por estar conmigo ¿vale? entonces yo siempre he intentado no hacer que la gente tal, porque claro, yo no voy a ir allí a estar con sus amigas, porque yo no quiero estar con sus amigas quiero estar con ellas, joder, darle un beso y agrazarla y decirle que la quiero mucho. Eso es lo que quería. Entonces, porque además llevábamos mucho tiempo juntos o bueno, quedando y tal, ¿sabes? Pero no me gustaba hacer eso, porque quiero que la gente disfrute de su tiempo y quiero que salga de ti. No quiero yo decirte. Quiero que salga de ti. ¿Entiendes? Porque si no es muy aburrido el amor. Cuando estás todo el rato dando y recibes muy poco es muy aburrido, es muy nocivo, es tóxico. ¿Entiendes? Entonces, claro, yo... Es una situación difícil para mí, ¿no? Porque yo sabía que esto era así, pero la quería tanto. Que daba igual. Porque cinco minutos con ella significaban diez horas con cualquier otra. ¿Entiendes? Ese nivel de vibración no lo había tenido nunca. Estaba completamente enamorado. Y yo, tras esa noche en la que ella no salió de ella, como una de las muchas noches en las que no salió de ella estar conmigo, un rato, 10 minutos, 20 minutos y luego ya estaba, dije, me di cuenta en el breve momento de lucidez que tienes cuando eres un imbécil enamorado, porque si eres un enamorado eres un imbécil, eres una persona que no es consciente de nada, está perdida, está completamente vulnerable, es frágil, débil. Una persona enamorada es una persona débil, es una persona que es manipulable, completamente manipulable. Y en un breve momento de lucidez que tuve, dije, hostias, estoy tan enamorado que me estoy haciendo muchísimo daño, tío. Cada día en el que no puedo estar con ella, me estoy haciendo muchísimo daño. Lo único en lo que pienso es en ella. Todo el día, toda la noche, todo el rato. No paro de pensar en ella. Y ella le suda todo el puto coño. Queda conmigo de vez en cuando, se lo pasa bien y ya está. Porque no quiere nada más. Y es totalmente respetable. Es totalmente respetable. Pero me está haciendo muchísimo daño. Tengo que parar. Así que le dejé de contestar. Ella me habló a la mañana siguiente, tal. Yo le contesté, tal, le dije tal. Bueno, ¿qué tal? Bien, tal. Vale, me alegro, tal. Tal. Al rato me volvió a hablar, oíste, porque hablábamos mucho. Mucho, mucho, mucho. Y decidí no contestarle más. Ella me hizo una broma, no sé qué. Oye, contéstame, joder, estoy resaca, ¿qué tal? No sé qué, porque ella estaba en su derecho, ella no estaba siendo mala. Es que yo estaba muy enamorado, tío. Y no estaba siendo correspondido, no es culpa suya. Ella, pues, yo le gustaba y se lo pasaba muy bien conmigo, nos lo pasábamos bien, pero ya está. Pero yo estaba enamorado. ¿Entiendes? Así que tuve que dejar de contestarle. Porque no tenía otra arma. Porque no podía cortar con ella. No podía decirle que no quería volverla a ver porque me estaría mintiendo. Claro que quería volverla a ver. Haría lo que fuese por ella. Y lo hice durante muchos meses. Pero llegó un momento en el que tuve que anteponer mi salud mental a intentar sonsacar de donde no hay nada que sacar. Y es muy difícil darse cuenta, muy difícil. Ha sido probablemente, pues, probablemente no, ha sido el peor momento de mi vida en cuanto al amor, sin duda. Y pasé semanas con ganas de llorar, durmiendo mal, alterado, con ansiedad fatal. Y ella sin tener ni puta idea. Ella pensaba que me habría pillado un rebote y lo seguirá pensando. Y lo seguirá pensando, pero no.

desu

#28 Hoy le he tenido que explicar al becario de huggingfaces como funciona el codigo...

Ese es el nivel de esa empresa... horrible, no useis huggingfaces nunca.