diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..736fac4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +models +test \ No newline at end of file diff --git a/.gitignore b/.gitignore index 800fc84..5655900 100644 --- a/.gitignore +++ b/.gitignore @@ -150,4 +150,5 @@ app/logs/* *.avi *.json *.env* -config.backup.py \ No newline at end of file +config.backup.py +models \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 2fa8df8..adbaff5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,20 +16,21 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libgl1 \ libglib2.0-0 \ ca-certificates \ + git \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* WORKDIR /app -COPY pyproject.toml uv.lock ./ +COPY pyproject.toml uv.lock download_model.sh ./ ENV UV_COMPILE_BYTECODE=0 -RUN uv sync --frozen --no-dev --no-install-project --python 3.10 +RUN uv sync --frozen --no-dev --no-install-project --python 3.13 # 4. 拷贝项目文件并安装项目本身 -COPY . . -RUN uv sync --frozen --no-dev --python 3.10 +#COPY . . +RUN uv sync --frozen --no-dev --python 3.13 ENV PATH="/app/.venv/bin:$PATH" diff --git a/app/config/config.py b/app/config/config.py index d4accba..8c6d20d 100644 --- a/app/config/config.py +++ b/app/config/config.py @@ -17,7 +17,10 @@ class Settings(BaseSettings): extra='ignore' # 忽略环境变量中多余的键 ) # 启动端口 - SERVE_PROD: int = Field(default=8000, description='') + SERVE_PORT: int = Field(default=10090, description='') + + FLUX2_KLEIN_MODEL_PATH: str = Field(default="/models", description='') + # 调试配饰 LOCAL: int = Field(default=0, description="是否在本地运行,1表示本地运行,0表示生产环境运行") diff --git a/logging_env.py b/app/logging_env.py similarity index 98% rename from logging_env.py rename to app/logging_env.py index 64a1153..29c2081 100644 --- a/logging_env.py +++ b/app/logging_env.py @@ -1,4 +1,4 @@ -LOGS_PATH = 'logs/' +LOGS_PATH = './logs/' LOGGER_CONFIG_DICT = { 'version': 1, 'disable_existing_loggers': False, diff --git a/main.py b/app/main.py similarity index 84% rename from main.py rename to app/main.py index a8273ea..b09ebd1 100644 --- a/main.py +++ b/app/main.py @@ -3,8 +3,7 @@ import os import litserve as ls -from app.config.config import settings -from logging_env import LOGGER_CONFIG_DICT +from app.logging_env import LOGGER_CONFIG_DICT from app.server.generate_image.flux2_klein.server import Flux2KleinServer logger = logging.getLogger(__name__) @@ -22,4 +21,4 @@ if __name__ == '__main__': to_product = Flux2KleinServer(api_path='/api/v1/to_product') server = ls.LitServer([to_product]) - server.run(port=settings.SERVE_PROD) + server.run(port=8888) diff --git a/app/server/generate_image/flux2_klein/client.py b/app/server/generate_image/flux2_klein/client.py index 7aa16bc..8417eda 100644 --- a/app/server/generate_image/flux2_klein/client.py +++ b/app/server/generate_image/flux2_klein/client.py @@ -9,5 +9,5 @@ request_data = { "infer_step":4, "tasks_id":"123456-123" } -response = requests.post("http://127.0.0.1:8012//api/v1/to_product", json=request_data) +response = requests.post("http://127.0.0.1:10090//api/v1/to_product", json=request_data) print(f"Status: {response.status_code}\nResponse:\n {response.text}") diff --git a/app/server/generate_image/flux2_klein/server.py b/app/server/generate_image/flux2_klein/server.py index d5bd9e1..f546119 100644 --- a/app/server/generate_image/flux2_klein/server.py +++ b/app/server/generate_image/flux2_klein/server.py @@ -1,4 +1,6 @@ import io +import os + import torch import litserve as ls from diffusers import Flux2KleinPipeline @@ -15,7 +17,8 @@ class Flux2KleinServer(ls.LitAPI): # Load the model dtype = torch.bfloat16 self.device = device - self.model = Flux2KleinPipeline.from_pretrained("black-forest-labs/FLUX.2-klein-4B", torch_dtype=dtype, is_distilled=False) + model_path = os.path.join(settings.FLUX2_KLEIN_MODEL_PATH, "FLUX.2-klein-4B") + self.model = Flux2KleinPipeline.from_pretrained(model_path, torch_dtype=dtype, is_distilled=False) self.model.to(device) # save some VRAM by offloading the model to CPU def decode_request(self, request): diff --git a/client.py b/client.py deleted file mode 100644 index c380848..0000000 --- a/client.py +++ /dev/null @@ -1,7 +0,0 @@ -# This file is auto-generated by LitServe. -# Disable auto-generation by setting `generate_client_file=False` in `LitServer.run()`. - -import requests - -response = requests.post("http://127.0.0.1:8012/predict", json={"input": 4.0}) -print(f"Status: {response.status_code}\nResponse:\n {response.text}") diff --git a/docker-compose.yml b/docker-compose.yml index 18e93f8..1bde592 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,20 +1,17 @@ services: - AiDA_Model_Litserve: + aida_model_litserve: build: context: . dockerfile: Dockerfile working_dir: /app - environment: - GOOGLE_APPLICATION_CREDENTIALS: /google_application_credentials.json - DEBUG: 0 volumes: - ./app:/app/app - - ./.prod_env:/app/.env - - ./data:/data - - ./google_application_credentials.json:/google_application_credentials.json + - ./.env_prod:/app/.env + - ./models:/models + - ./logs:/app/logs - /etc/localtime:/etc/localtime:ro ports: - - "10070:8000" + - "${SERVE_PORT}:8888" deploy: resources: reservations: diff --git a/download_model.sh b/download_model.sh new file mode 100644 index 0000000..ed8f74c --- /dev/null +++ b/download_model.sh @@ -0,0 +1 @@ +huggingface-cli download black-forest-labs/FLUX.2-klein-4B --local-dir /data/models/FLUX.2-klein-4B \ No newline at end of file