From a983fcd036804f298603c5aa2b69e021689a985d Mon Sep 17 00:00:00 2001 From: Marcin Badurowicz Date: Tue, 12 Dec 2023 22:31:56 +0100 Subject: [PATCH] docs: split and update README --- .vscode/settings.json | 5 ++ README.md | Bin 16402 -> 7632 bytes docs/ai.md | 68 +++++++++++++++++++++++++ docs/start.md | 112 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 185 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 docs/ai.md create mode 100644 docs/start.md diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cbbbea7 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.enableFiletypes": [ + "!markdown" + ] +} \ No newline at end of file diff --git a/README.md b/README.md index d3575800bd82719e73fd7b3979df8226b26dc208..5c93c1182750bfb590c94c8b77c74df8518925f1 100644 GIT binary patch literal 7632 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 diff --git a/docs/ai.md b/docs/ai.md new file mode 100644 index 0000000..05fd029 --- /dev/null +++ b/docs/ai.md @@ -0,0 +1,68 @@ +# Backend AI + +Projekt komunikuje się z modelem językowym na backendzie, w tym momencie +dostosowany jest do serwera REST uruchamianego przez +[llama.cpp](https://github.com/ggerganov/llama.cpp) (aplikacja `server`), oraz +testowana była na modelu Mistral-7B i jego pochodnych, w szczególności +[Mistral-RP-0.1-7B-GGUF](https://huggingface.co/Undi95/Mistral-RP-0.1-7B-GGUF?not-for-all-audiences=true). + +Aby uruchomić serwer modelu językowego, należy pobrać (lub skompilować) +llama.cpp, pobrać plik modelu z serwera huggingface.co i uruchomić serwer +wydając polecenie, na przykład: + +```bash +./server -m -ngl 35 --host 127.0.0.1 +``` + +(tutaj następuje przeniesienie 35 warstw modelu na urządzenie CUDA, wymagana +jest odmiana llama.cpp z obsługą CUDA, w przeciwnym wypadku parametr `-ngl` nie +jest dostępny) + +Pełna dokumentacja serwera: + + +## docker + +Można też uruchomić Backend AI llama.cpp w oparciu o plik +`docker-compose-;lamacpp.yml`. W tym celu należy w pliku `.env`, w którym +znajduje się konfiguracja ustawień lokalnej bazy danych dodać kolejne dwie +zmienne definiujące wariant serwera oraz ścieżkę lokalną do pliku modelu, np.: + +```env +LLAMA_VARIANT=full +MODEL_PATH=U:\ml\krakowiak-7b.gguf.q4_k_m.bin +``` + +Dostępne warianty serwera to: `full` (CPU), `full-cuda` (NVIDIA GPU) i +`full-rocm` (AMD ROCm GPU). + +Teraz, zamiast wydawać polecenie `docker compose up` tak jak zwykle, możesz +wydać komendę: + +```sh +docker compose -f docker-compose-llamacpp.yml up +``` + +Co uruchomi zarówno serwer modelu językowego, jak i bazy danych niezbędne +aplikacji głównej. + +## Konfiguracja backendu AI w aplikacji + +W pliku `Server/appsettings.json`, możesz zdefiniować ścieżkę do URL serwera +llama.cpp, na przykład: + +```json +"AiEndpoint": { + "EndpointUrl": "http://127.0.0.1:8080/completion" +} +``` + +Niezbędne jest również wybranie modułów odpowiedzialnych za komunikację z +backendem AI i przygotowaniem promptów, które to należy wybrać jako pełne nazwy +typów, włącznie z ich _assembly_, dla Mistral-7B należy wybrać +`AlpacaPromptProvider`: + +```json +"AiBackendProvider": "Fracture.Shared.External.Providers.Ai.LlamaCpp.LlamaCppBackendProvider, Fracture.Shared.External, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", +"AiPromptTemplateProvider": "Fracture.Shared.External.Providers.Ai.AlpacaPromptProvider, Fracture.Shared.External, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", +``` diff --git a/docs/start.md b/docs/start.md new file mode 100644 index 0000000..233b838 --- /dev/null +++ b/docs/start.md @@ -0,0 +1,112 @@ +# Uruchomienie aplikacji + +Ten projekt wykorzystuje technologię Docker oraz Docker Compose do zarządzania +kontenerami i uruchamiania infrastruktury aplikacji. Aby uruchomić tę aplikację +na swoim komputerze, postępuj zgodnie z poniższymi krokami: + +## 1. Instalacja Docker Desktop + +Jeśli nie masz jeszcze zainstalowanego Docker Desktop, musisz to zrobić przed +uruchomieniem aplikacji. Docker Desktop jest dostępny dla systemów Windows, +Linux oraz macOS. Pobierz go stąd: + + +(Możesz również skorzystać z Rancher Desktop, który jest produktem open source, +, bądź innego, +kompatybilnego z Docker Compose dowolnego rozwiazania) + +Po pobraniu i zainstalowaniu Docker Desktop, upewnij się, że jest uruchomiony. + +## 2. Pobranie repozytorium + +W kolejnym kroku pobierz poniższe repozytorium na swój komputer, wykonując +polecenia w terminalu lub wierszu poleceń w twoim lokalnym katalogu z +repozytoriami kodu. + +```bash +git clone https://github.com/pollubnet/fracture.git +cd fracture +``` + +## 3. Dostosowanie pliku `.env` + +W pliku `docker-compose.yml` zostały wykorzystane zmienne środowiskowe. W celu +utworzenia zmiennych środowiskowych skopiuj zawartość pliku `.sample.env` do +pliku o nazwie `.env`. Plik `.env` utwórz w głównym katalogu, w tym samym +miejscu gdzie znajduje się plik `docker-compose.yml`. + +Następnie dostosuj zmienne środowiskowe w `.env` do swoich potrzeb oraz dokonaj +analogicznie zmian w projekcie `Fracture.Server` w pliku konfiguracyjnym +`appsettings.json`. Jeżeli używasz domyślnych opcji z pliku przykładowego +`.sample.env`, to nie trzeba dostosowywać pliku `appsettings.json`. + +## 4. Uruchomienie infrastruktury aplikacji za pomocą Docker Compose + +Po pobraniu repozytorium oraz zainstalowaniu Docker Desktop, możesz uruchomić +infrastrukturę aplikacji za pomocą Docker Compose. + +W katalogu projektu znajdziesz plik `docker-compose.yml`, który zawiera +konfigurację kontenerów. + +W terminalu przejdź do katalogu głównego projektu i wydaj komendę: + +```bash +docker-compose up +``` + +Docker automatycznie pobierze i uruchomi odpowiednie wersje baz danych i innych +niezbędnych narzędzi. + +## 5. Uruchomienie aplikacji w Visual Studio + +Aby uruchomić tę aplikację w Visual Studio, rozpocznij od projektu +`Fracture.Server`, który trzeba ustawić jako domyślny. Wykonaj następujące +kroki: + +1. Otwórz solucję projektu w Visual Studio (plik `Fracture.sln`), +2. Przejdź do Eksploratora Rozwiązań (Solution Explorer) po prawej stronie, +3. Kliknij prawym przyciskiem myszy na projekcie `Fracture.Server`, a następnie + wybierz opcję "Ustaw jako projekt startowy" (Set as StartUp Project) z menu + kontekstowego. + +Teraz `Fracture.Server` jest ustawiony jako domyślny projekt. Możesz zacząć +pracować nad nim i uruchamiać aplikację w trybie debugowania, naciskając klawisz +F5 lub wybierając opcję "Uruchom" (Run) z menu Visual Studio. + +Aplikacja uruchomi się, a Visual Studio uruchomi także przeglądarkę internetową +z dostępem do pierwszej strony aplikacji. + +## Dodatkowe narzędzia + +Dodatkowo w celu zarządzania infrastrukturą aplikacji został uruchomiony +pgAdmin4 oraz Redis Commander pod domyślnymi adresami: + +### pgAdmin4 + +Adres: + +Dostęp: + +``` +EMAIL=root@pollub.net +PASSWORD=root +``` + +### Redis Commander + +Adres: + +Dostęp: + +``` +USER=redis +PASSWORD=password +``` + +Numery portów, nazwy użytkowników i hasła można edytować w pliku `.env` w +katalogu głównym projektu. + +Warto pamiętać, że na tym etapie wszystko powinno poprawnie się uruchomić, jeśli +zostało wcześniej poprawnie skonfigurowane. Jeśli masz jakiekolwiek problemy z +konfiguracją, upewnij się, że wszystkie zależności i środowisko są właściwie +skonfigurowane.