Second-Me/lpm_kernel/app.py
Zachary Pitroda 053090937d
Added CUDA support (#228)
* Add CUDA support

- CUDA detection
- Memory handling
- Ollama model release after training

* Fix logging issue

added cuda support flag so log accurately reflected cuda toggle

* Update llama.cpp rebuild

Changed llama.cpp to only check if cuda support is enabled and if so rebuild during the first build rather than each run

* Improved vram management

Enabled memory pinning and optimizer state offload

* Fix CUDA check

rewrote llama.cpp rebuild logic, added manual y/n toggle if user wants to enable cuda support

* Added fast restart and fixed CUDA check command

Added make docker-restart-backend-fast to restart the backend and reflect code changes without causing a full llama.cpp rebuild

Fixed make docker-check-cuda command to correctly reflect cuda support

* Added docker-compose.gpu.yml

Added docker-compose.gpu.yml to fix error on machines without nvidia gpu and made sure "\n" is added before .env modification

* Fixed cuda toggle

Last push accidentally broke cuda toggle

* Code review fixes

Fixed errors resulting from removed code:
- Added return save_path to end of save_hf_model function
- Rolled back download_file_with_progress function

* Update Makefile

Use cuda by default when using docker-restart-backend-fast

* Minor cleanup

Removed unnecessary makefile command and fixed gpu logging

* Delete .gpu_selected

* Simplified cuda training code

- Removed dtype setting to let torch automatically handle it
- Removed vram logging
- Removed Unnecessary/old comments

* Fixed gpu/cpu selection

Made "make docker-use-gpu/cpu" command work with .gpu_selected flag and changed "make docker-restart-backend-fast" command to respect flag instead of always using gpu

* Fix Ollama embedding error

Added custom exception class for Ollama embeddings, which seemed to be returning keyword arguments while the Python exception class only accepts positional ones

* Fixed model selection & memory error

Fixed training defaulting to 0.5B model regardless of selection and fixed "free(): double free detected in tcache 2" error caused by cuda flag being passed incorrectly
2025-04-25 10:20:36 +08:00

68 lines
1.8 KiB
Python

from flask import Flask, request
from .common.repository.database_session import DatabaseSession, Base
from .common.logging import logger
from .api import init_routes
from .api.file_server.handler import FileServerHandler
from .database.migration_manager import MigrationManager
import os
import atexit
import subprocess
def create_app():
app = Flask(__name__)
# Initialize database connection
try:
DatabaseSession.initialize()
logger.info("Database connection initialized successfully")
except Exception as e:
logger.error(f"Failed to initialize database connection: {str(e)}")
raise
# Add CORS support
@app.after_request
def after_request(response):
# Allow all origins in development environment
response.headers.add("Access-Control-Allow-Origin", "*")
response.headers.add(
"Access-Control-Allow-Headers", "Content-Type,Authorization"
)
response.headers.add(
"Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS"
)
return response
# Create file server handler
file_handler = FileServerHandler(
os.path.join(os.getenv("APP_ROOT", "/app"), "resources", "raw_content")
)
@app.route("/raw_content/", defaults={"path": ""})
@app.route("/raw_content/<path:path>")
def serve_content(path=""):
return file_handler.handle_request(path, request.path)
# Register all routes
init_routes(app)
# Clean up database connection only when the application shuts down
@app.teardown_appcontext
def cleanup_db(exception):
pass
return app
app = create_app()
@atexit.register
def cleanup():
DatabaseSession.close()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)