Search code examples
dockermachine-learningrasa-nlurasa-core

Need help to setup Rasa NLU server with docker


I went through various documentation to setup Rasa NLU on my ubuntu server. And they have a docker container which has to be run

docker run -p 5000:5000 rasa/rasa_nlu:latest-full

So I setup a model and few training data and restarted docker instance. And it is not able to find my model when I go to /status in the url and also it returns project not found in the response . I believe I need to setup up project path and models path when running the docker container. But I am not sure how to do it.

I am new to docker as well as Rasa NLU. If someone can point me out to right direction, it would be of great help!


Solution

  • The command which you provided, starts the NLU server. As your status is project not found it seems that you have not yet provided a trained model.

    You can either mount a directory, which contains the trained model, as Docker volume, e.g.:

    docker run 
      -v nlu-models:/app/nlu-models \ # mounts the directory `nlu-models` in the container to `/app/nlu-models`
      -p 5000:5000 \ # maps the container port 5000 to port 5000 of your host
      rasa/rasa_nlu:latest-full \ # the Docker image
      start --path /app/nlu-models # starts the NLU server and points it to the directory with the trained models`
    

    The other option is to start the server with command from your question and then start a training on the server by sending the training data via POST request to the server (make sure your header specifies Content-Type: application/x-yml). To do so, specify a file config_train_server.yml which contains the configuration of your NLU pipeline and your training data, e.g.:

    language: "en"
    
    pipeline: "spacy_sklearn"
    
    # data contains the same md, as described in the training data section
    data: |
      ## intent:affirm
      - yes
      - yep
    
      ## intent:goodbye
      - bye
      - goodbye
    

    Then you can send the content of the file via POST request to the server, e.g.:

    curl -XPOST \ # POST request
      -H "Content-Type: application/x-yml" \ # content header localhost:5000/train?project=my_project \
      -d @config_train_server.yml # pipeline config and training data as body of the POST request