private-gpt icon indicating copy to clipboard operation
private-gpt copied to clipboard

[BUG] Another permissions error when installing with docker-compose

Open salimfadhley opened this issue 1 year ago • 2 comments

Pre-check

  • [X] I have searched the existing issues and none cover this bug.

Description

This looks similar, but not the same as #1876

As for following the instructions, I've not seen any relevant guide to installing with Docker, hence working a bit blind.

Background: I'm trying to run this on an Asustor NAS, which offers very little ability to customize the environment. Ideally, I'd just like to be able to run this by pasting a docker-compose file into Portainer, and having it work it's magic from there:


sal@halob:/volume1/home/sal/apps/private-gpt $ docker-compose up
[+] Running 3/3
 ✔ Network private-gpt_default          Created                                                                                                                                   0.1s
 ✔ Container private-gpt-ollama-1       Created                                                                                                                                   0.1s
 ✔ Container private-gpt-private-gpt-1  Created                                                                                                                                   0.1s
Attaching to ollama-1, private-gpt-1
ollama-1       | Couldn't find '/root/.ollama/id_ed25519'. Generating new private key.
ollama-1       | Your new public key is:
ollama-1       |
ollama-1       | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBNQkShAIoUDyyueUTiCHM9/AZfZ+rxnUZgmh+YByBVB
ollama-1       |
ollama-1       | 2024/07/23 23:20:28 routes.go:1096: INFO server config env="map[CUDA_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION: OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_HOST:http://0.0.0.0:11434 OLLAMA_INTEL_GPU:false OLLAMA_KEEP_ALIVE:5m0s OLLAMA_LLM_LIBRARY: OLLAMA_MAX_LOADED_MODELS:0 OLLAMA_MAX_QUEUE:512 OLLAMA_MAX_VRAM:0 OLLAMA_MODELS:/root/.ollama/models OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:0 OLLAMA_ORIGINS:[http://localhost https://localhost http://localhost:* https://localhost:* http://127.0.0.1 https://127.0.0.1 http://127.0.0.1:* https://127.0.0.1:* http://0.0.0.0 https://0.0.0.0 http://0.0.0.0:* https://0.0.0.0:* app://* file://* tauri://*] OLLAMA_RUNNERS_DIR: OLLAMA_SCHED_SPREAD:false OLLAMA_TMPDIR: ROCR_VISIBLE_DEVICES:]"
ollama-1       | time=2024-07-23T23:20:28.317Z level=INFO source=images.go:778 msg="total blobs: 0"
ollama-1       | time=2024-07-23T23:20:28.317Z level=INFO source=images.go:785 msg="total unused blobs removed: 0"
ollama-1       | time=2024-07-23T23:20:28.317Z level=INFO source=routes.go:1143 msg="Listening on [::]:11434 (version 0.2.6)"
ollama-1       | time=2024-07-23T23:20:28.318Z level=INFO source=payload.go:30 msg="extracting embedded files" dir=/tmp/ollama1112441504/runners
private-gpt-1  | 23:20:29.406 [INFO    ] private_gpt.settings.settings_loader - Starting application with profiles=['default', 'docker']
ollama-1       | time=2024-07-23T23:20:33.589Z level=INFO source=payload.go:44 msg="Dynamic LLM libraries [cpu_avx cpu_avx2 cuda_v11 rocm_v60102 cpu]"
ollama-1       | time=2024-07-23T23:20:33.589Z level=INFO source=gpu.go:205 msg="looking for compatible GPUs"
ollama-1       | time=2024-07-23T23:20:33.589Z level=WARN source=gpu.go:225 msg="CPU does not have minimum vector extensions, GPU inference disabled" required=avx detected="no vector extensions"
ollama-1       | time=2024-07-23T23:20:33.590Z level=INFO source=types.go:105 msg="inference compute" id=0 library=cpu compute="" driver=0.0 name="" total="31.1 GiB" available="28.1 GiB"
private-gpt-1  | There was a problem when trying to write in your cache folder (/nonexistent/.cache/huggingface/hub). You should set the environment variable TRANSFORMERS_CACHE to a writable directory.
private-gpt-1  | None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used.
private-gpt-1  | 23:20:40.419 [INFO    ] private_gpt.components.llm.llm_component - Initializing the LLM in mode=ollama
private-gpt-1  | Traceback (most recent call last):
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 798, in get
private-gpt-1  |     return self._context[key]
private-gpt-1  |            ~~~~~~~~~~~~~^^^^^
private-gpt-1  | KeyError: <class 'private_gpt.ui.ui.PrivateGptUi'>
private-gpt-1  |
private-gpt-1  | During handling of the above exception, another exception occurred:
private-gpt-1  |
private-gpt-1  | Traceback (most recent call last):
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 798, in get
private-gpt-1  |     return self._context[key]
private-gpt-1  |            ~~~~~~~~~~~~~^^^^^
private-gpt-1  | KeyError: <class 'private_gpt.server.ingest.ingest_service.IngestService'>
private-gpt-1  |
private-gpt-1  | During handling of the above exception, another exception occurred:
private-gpt-1  |
private-gpt-1  | Traceback (most recent call last):
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 798, in get
private-gpt-1  |     return self._context[key]
private-gpt-1  |            ~~~~~~~~~~~~~^^^^^
private-gpt-1  | KeyError: <class 'private_gpt.components.vector_store.vector_store_component.VectorStoreComponent'>
private-gpt-1  |
private-gpt-1  | During handling of the above exception, another exception occurred:
private-gpt-1  |
private-gpt-1  | Traceback (most recent call last):
private-gpt-1  |   File "<frozen runpy>", line 198, in _run_module_as_main
private-gpt-1  |   File "<frozen runpy>", line 88, in _run_code
private-gpt-1  |   File "/home/worker/app/private_gpt/__main__.py", line 5, in <module>
private-gpt-1  |     from private_gpt.main import app
private-gpt-1  |   File "/home/worker/app/private_gpt/main.py", line 6, in <module>
private-gpt-1  |     app = create_app(global_injector)
private-gpt-1  |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/private_gpt/launcher.py", line 63, in create_app
private-gpt-1  |     ui = root_injector.get(PrivateGptUi)
private-gpt-1  |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
private-gpt-1  |     return function(*args, **kwargs)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
private-gpt-1  |     provider_instance = scope_instance.get(interface, binding.provider)
private-gpt-1  |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
private-gpt-1  |     return function(*args, **kwargs)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
private-gpt-1  |     instance = self._get_instance(key, provider, self.injector)
private-gpt-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
private-gpt-1  |     return provider.get(injector)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
private-gpt-1  |     return injector.create_object(self._cls)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
private-gpt-1  |     self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1031, in call_with_injection
private-gpt-1  |     dependencies = self.args_to_inject(
private-gpt-1  |                    ^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
private-gpt-1  |     return function(*args, **kwargs)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1079, in args_to_inject
private-gpt-1  |     instance: Any = self.get(interface)
private-gpt-1  |                     ^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
private-gpt-1  |     return function(*args, **kwargs)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
private-gpt-1  |     provider_instance = scope_instance.get(interface, binding.provider)
private-gpt-1  |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
private-gpt-1  |     return function(*args, **kwargs)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
private-gpt-1  |     instance = self._get_instance(key, provider, self.injector)
private-gpt-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
private-gpt-1  |     return provider.get(injector)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
private-gpt-1  |     return injector.create_object(self._cls)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
private-gpt-1  |     self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1031, in call_with_injection
private-gpt-1  |     dependencies = self.args_to_inject(
private-gpt-1  |                    ^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
private-gpt-1  |     return function(*args, **kwargs)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1079, in args_to_inject
private-gpt-1  |     instance: Any = self.get(interface)
private-gpt-1  |                     ^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
private-gpt-1  |     return function(*args, **kwargs)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
private-gpt-1  |     provider_instance = scope_instance.get(interface, binding.provider)
private-gpt-1  |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
private-gpt-1  |     return function(*args, **kwargs)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
private-gpt-1  |     instance = self._get_instance(key, provider, self.injector)
private-gpt-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
private-gpt-1  |     return provider.get(injector)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
private-gpt-1  |     return injector.create_object(self._cls)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
private-gpt-1  |     self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1040, in call_with_injection
private-gpt-1  |     return callable(*full_args, **dependencies)
private-gpt-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/private_gpt/components/vector_store/vector_store_component.py", line 114, in __init__
private-gpt-1  |     client = QdrantClient(
private-gpt-1  |              ^^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/qdrant_client/qdrant_client.py", line 117, in __init__
private-gpt-1  |     self._client = QdrantLocal(
private-gpt-1  |                    ^^^^^^^^^^^^
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/qdrant_client/local/qdrant_local.py", line 66, in __init__
private-gpt-1  |     self._load()
private-gpt-1  |   File "/home/worker/app/.venv/lib/python3.11/site-packages/qdrant_client/local/qdrant_local.py", line 97, in _load
private-gpt-1  |     os.makedirs(self.location, exist_ok=True)
private-gpt-1  |   File "<frozen os>", line 215, in makedirs
private-gpt-1  |   File "<frozen os>", line 225, in makedirs
private-gpt-1  | PermissionError: [Errno 13] Permission denied: 'local_data/private_gpt'
^CGracefully stopping... (press Ctrl+C again to force)
[+] Stopping 2/2
 ✔ Container private-gpt-private-gpt-1  Stopped                                                                                                                                   0.3s
 ✔ Container private-gpt-ollama-1       Stopped  

Steps to Reproduce

  1. Clone the repo
  2. docker-compose build
  3. docker-compose up

Expected Behavior

It should just run

Actual Behavior

Error, as reported above

Environment

Running on an Asustor router, docker 25.0.5

Additional Information

No response

Version

latest

Setup Checklist

  • [X] Confirm that you have followed the installation instructions in the project’s documentation.
  • [X] Check that you are using the latest version of the project.
  • [X] Verify disk space availability for model storage and data processing.
  • [X] Ensure that you have the necessary permissions to run the project.

NVIDIA GPU Setup Checklist

  • [ ] Check that the all CUDA dependencies are installed and are compatible with your GPU (refer to CUDA's documentation)
  • [ ] Ensure an NVIDIA GPU is installed and recognized by the system (run nvidia-smi to verify).
  • [ ] Ensure proper permissions are set for accessing GPU resources.
  • [ ] Docker users - Verify that the NVIDIA Container Toolkit is configured correctly (e.g. run sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi)

salimfadhley avatar Jul 23 '24 23:07 salimfadhley

Just a request: One thing that would make this project way more accessible is if it could work in Portainer, a widely used tool for launching containerized applications. Asustor NAS servers support this application, and for apps that support it, launching a new service might be as simple as just pasting in a docker-compose file, or providing a path to a git repo with a docker-compose file. Portainer can take care of most things like building the images (if no official images exist), and then provides a handy control panel so the admin can browse logs.

It really helps if the default Docker config "just works". Failing that, could we have a section on how to install with Docker? I couldn't see a mention of Docker in the manual.

salimfadhley avatar Jul 23 '24 23:07 salimfadhley

Have you tried latest changes? It's like an read/write problem in your host machine. We've updated our docker-compose compatibility to have different profiles.

jaluma avatar Aug 08 '24 15:08 jaluma

Same error here

theodufort avatar Aug 20 '24 13:08 theodufort

Same issue here. I tried to change the UID/GID to match the user i have on my linux system(1000) and got this when building: => ERROR [private-gpt-ollama app 1/10] RUN addgroup --system --gid ${GROUP_GID} worker

I then modified the Dockerfile.ollama and the user creation looks like this: 31 # Define the User ID (UID) for the non-root user 32 # UID 100 is chosen to avoid conflicts with existing system users 33 ARG UID=1000 34 35 # Define the Group ID (GID) for the non-root user 36 # GID 65534 is often used for the 'nogroup' or 'nobody' group 37 ARG GID=1000 38 ARG UGNAME=worker 39 40 RUN addgroup --system --gid ${GID} ${UGNAME} 41 42 RUN adduser --system --disabled-password --home /home/${UGNAME} \ 43 --uid ${UID} --ingroup ${UGNAME} ${UGNAME} 44 45 #RUN adduser --system --gid ${GID} --uid ${UID} --home /home/worker worker 46 WORKDIR /home/worker/app

It worked!

iguy0 avatar Aug 30 '24 13:08 iguy0

Sorry for the delay :(

I just pushed a generic fix in https://github.com/zylon-ai/private-gpt/pull/2059. If somebody can check if this issue is fixed, it would be nice!

@salimfadhley @iguy0 @theodufort @vilaca

jaluma avatar Sep 11 '24 14:09 jaluma

I am having this issue right now. It's not a permissions issue. There is nothing in the folder. ./local_data is empty.

If i copy paste private_gpt into it (I am just hacking, I have no idea if thats right, forgive me), it fails trying to find another file.

Not permissions, there is no file. This is coming directly from a brand new "git clone" and then "docker compose up" kind of installation.

macornwell avatar Sep 14 '24 18:09 macornwell

@macornwell But a folder also has permissions. If the folder has the wrong permissions, you won't be able to write to it. You can see this by doing an ls -al. Have you tried to use my potential fix? You can do with the command: git checkout fix/docker-permissions

jaluma avatar Sep 16 '24 06:09 jaluma

I did a checkout of fix/docker-permissions and it went through. I think this is the success you were looking for.

macornwell avatar Sep 16 '24 13:09 macornwell

@macornwell Thank you so much for the confirmation!

jaluma avatar Sep 16 '24 15:09 jaluma

~~I do not see fix/docker-permissions branch~~

It is in the PR #2059 not available in v0.6.2. Use main branch.

twnaing avatar Nov 09 '24 12:11 twnaing