Open SjoerdBraaksma opened 11 months ago
did you mount the models folder as a volume?
hey pabloogc!
I am quite new to building from a dockerfile, so I just ran it expecting it to grab the model from models during build. I understand I need to mount it in the dockerfile to a specific location?
Any help would be greatly appreciated, I would love to present your work to my team tomorrow!
edit: I mounted the volumes according to another post, but then I get the same error as when I run locally:
23:13:52.340 [INFO ] private_gpt.settings.settings_loader - Starting application with profiles=['default']
23:13:53.320 [WARNING ] matplotlib - Matplotlib created a temporary cache directory at /tmp/matplotlib-we9wa_lp because the default path (/nonexistent/.config/matplotlib) is not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing.
23:13:53.907 [INFO ] matplotlib.font_manager - generated new fontManager
gguf_init_from_file: invalid magic characters .
error loading model: llama_model_loader: failed to load model from /home/worker/app/models/mistral-7b-instruct-v0.1.Q4_K_M.gguf
llama_load_model_from_file: failed to load model
AVX = 1 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 |
Traceback (most recent call last):
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 798, in get
return self._context[key]
~~~~~~~~~~~~~^^^^^
KeyError: <class 'private_gpt.ui.ui.PrivateGptUi'>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 798, in get
return self._context[key]
~~~~~~~~~~~~~^^^^^
KeyError: <class 'private_gpt.server.ingest.ingest_service.IngestService'>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 798, in get
return self._context[key]
~~~~~~~~~~~~~^^^^^
KeyError: <class 'private_gpt.components.llm.llm_component.LLMComponent'>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/worker/app/private_gpt/__main__.py", line 5, in <module>
from private_gpt.main import app
File "/home/worker/app/private_gpt/main.py", line 11, in <module>
app = create_app(global_injector)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/private_gpt/launcher.py", line 125, in create_app
ui = root_injector.get(PrivateGptUi)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
provider_instance = scope_instance.get(interface, binding.provider)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
instance = self._get_instance(key, provider, self.injector)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
return provider.get(injector)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
return injector.create_object(self._cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1031, in call_with_injection
dependencies = self.args_to_inject(
^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1079, in args_to_inject
instance: Any = self.get(interface)
^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
provider_instance = scope_instance.get(interface, binding.provider)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
instance = self._get_instance(key, provider, self.injector)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
return provider.get(injector)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
return injector.create_object(self._cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1031, in call_with_injection
dependencies = self.args_to_inject(
^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1079, in args_to_inject
instance: Any = self.get(interface)
^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
provider_instance = scope_instance.get(interface, binding.provider)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
instance = self._get_instance(key, provider, self.injector)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
return provider.get(injector)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
return injector.create_object(self._cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1040, in call_with_injection
return callable(*full_args, **dependencies)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/private_gpt/components/llm/llm_component.py", line 20, in __init__
self.llm = LlamaCPP(
^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/llama_index/llms/llama_cpp.py", line 110, in __init__
self._model = Llama(model_path=model_path, **model_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/llama_cpp/llama.py", line 923, in __init__
self._n_vocab = self.n_vocab()
^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/llama_cpp/llama.py", line 2119, in n_vocab
return self._model.n_vocab()
^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/llama_cpp/llama.py", line 250, in n_vocab
assert self.model is not None
^^^^^^^^^^^^^^^^^^^^^^
AssertionError
I think my download jsut got corrupted, I re-downloaded the model using the script and it works!
However, when I build the Dockerfile and mount the folder to:
/home/worker/app/models
i still get the error:
23:31:55.808 [INFO ] private_gpt.settings.settings_loader - Starting application with profiles=['default']
23:31:56.744 [WARNING ] matplotlib - Matplotlib created a temporary cache directory at /tmp/matplotlib-b2byvb4x because the default path (/nonexistent/.config/matplotlib) is not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing.
23:31:57.341 [INFO ] matplotlib.font_manager - generated new fontManager
Traceback (most recent call last):
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 798, in get
return self._context[key]
~~~~~~~~~~~~~^^^^^
KeyError: <class 'private_gpt.ui.ui.PrivateGptUi'>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 798, in get
return self._context[key]
~~~~~~~~~~~~~^^^^^
KeyError: <class 'private_gpt.server.ingest.ingest_service.IngestService'>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 798, in get
return self._context[key]
~~~~~~~~~~~~~^^^^^
KeyError: <class 'private_gpt.components.llm.llm_component.LLMComponent'>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/worker/app/private_gpt/__main__.py", line 5, in <module>
from private_gpt.main import app
File "/home/worker/app/private_gpt/main.py", line 11, in <module>
app = create_app(global_injector)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/private_gpt/launcher.py", line 125, in create_app
ui = root_injector.get(PrivateGptUi)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
provider_instance = scope_instance.get(interface, binding.provider)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
instance = self._get_instance(key, provider, self.injector)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
return provider.get(injector)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
return injector.create_object(self._cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1031, in call_with_injection
dependencies = self.args_to_inject(
^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1079, in args_to_inject
instance: Any = self.get(interface)
^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
provider_instance = scope_instance.get(interface, binding.provider)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
instance = self._get_instance(key, provider, self.injector)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
return provider.get(injector)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
return injector.create_object(self._cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1031, in call_with_injection
dependencies = self.args_to_inject(
^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1079, in args_to_inject
instance: Any = self.get(interface)
^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
provider_instance = scope_instance.get(interface, binding.provider)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
return function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
instance = self._get_instance(key, provider, self.injector)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
return provider.get(injector)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
return injector.create_object(self._cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
File "/home/worker/app/.venv/lib/python3.11/site-packages/injector/__init__.py", line 1040, in call_with_injection
return callable(*full_args, **dependencies)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/worker/app/private_gpt/components/llm/llm_component.py", line 20, in __init__
self.llm = LlamaCPP(
^^^^^^^^^
File "/home/worker/app/.venv/lib/python3.11/site-packages/llama_index/llms/llama_cpp.py", line 105, in __init__
raise ValueError(
ValueError: Provided model path does not exist. Please check the path or provide a model_url to download.
I can give you an example docker compose service as reference, note the environment variables, I am using a custom profile docker
withe the model I want to use.
I suggest to go back to the documentation make sure you understand how profiles and llm modes work, most likely you missed something.
private-gpt:
build:
context: ../privategpt
dockerfile: Dockerfile.local
volumes:
- ../privategpt/local_data/:/home/worker/app/local_data
- ../privategpt/models/:/home/worker/app/models
environment:
PORT: 8080
PGPT_PROFILES: docker
PGPT_MODE: local
@SjoerdBraaksma
Similar to @pabloogc answer
I added a docker-compose file to mount local_data, models and create a port to expose the container
check out the example here: https://github.com/imartinez/privateGPT/pull/1277
after added docker-compose run:
docker compose up
I also encountered this problem, and found a workaround.
First, the models have to be downloaded into the 'models' volume that will be mounted by the container. The containerized application does not download them for you. This must be done before running the container.
Second, the application being run does not have write permissions in the directories created by the system user 'worker'. I changed the Dockerfile so that
RUN adduser --system worker
is now
RUN adduser worker
Then everything worked.
Is there a better way of doing this? Does making the directories as a system user provide some security benefit that should be preserved?
Hi Even i wanna deploy this in docker. if any of you solved it, can you please give me your repo link.
my contact email. raghava6006@gmail.com i can also be reached in whstapp +91 9087195451
@SjoerdBraaksma
Similar to @pabloogc answer
I added a docker-compose file to mount local_data, models and create a port to expose the container
check out the example here: #1277
after added docker-compose run:
docker compose up
Hi @evansnguyen - mind checking out my docker issue for a sec? Followed your description, here's an issue I just created:
https://github.com/imartinez/privateGPT/issues/1290
Thank you!
I can give you an example docker compose service as reference, note the environment variables, I am using a custom profile
docker
withe the model I want to use.I suggest to go back to the documentation make sure you understand how profiles and llm modes work, most likely you missed something.
private-gpt: build: context: ../privategpt dockerfile: Dockerfile.local volumes: - ../privategpt/local_data/:/home/worker/app/local_data - ../privategpt/models/:/home/worker/app/models environment: PORT: 8080 PGPT_PROFILES: docker PGPT_MODE: local
I have also encountered this issue, and tried this solution.
docker compose build --no-cache
docker compose up
.. It still fails to run says cannot find the model and is asking for a URL to download. Is there a way to pass the url through a variable maybe?
same here the docker setup has no actual documentation on the docs page and as per this topic, the model cant be found.
I had to use the same model as in settings-docker.yaml#10
(mistral-7b-instruct-v0.1.Q4_K_M.gguf)
llm_hf_model_file: ${PGPT_HF_MODEL_FILE:mistral-7b-instruct-v0.1.Q4_K_M.gguf}
Maybe it just needs to match the file name.
But then I got the error:
PermissionError: [Errno 13] Permission denied: 'local_data/private_gpt'
So, as a quick fix, I edited the Dockerfile to not use the user worker.
Here is my solution. It works for me I moved all the contents which in dir (Mistral-7B-Instruct-v0.1-GGUF) to the privateGPT/models.
Notice you don't need to change any files such as docker-compose.yaml or setting-docker.yaml and so on
It works
Hi!
I build the Dockerfile.local with an llm model installed in models following your instructions. However, I get the following error:
When I try to run locally, I get:
Everything is configured as required by running:
Do I need to change specific paths I missed?