I am stuck on the exact same error as you, Chris.
Hi guys, any ideas what the problem here could be?
Here is a screenshot: Screen Shot 2020-06-25 at 00.55.52|690x212
Thanks.
Hi Adam_mehdi Hope all is well!
I would suggest you get the app working on your desktop first, then deploy it on render.com.
Cheers mrfabuous1
Hi hodanajan Hope all is well!
I would suggest you get the app working on your desktop first, then deploy it on render.com.
Unfortunately the errors on render.com are not reflecting very well what is actually the problem in some cases.
Cheers mrfabuous1
Thanks for the response!
I’m new to this and don’t quite understand what you mean by getting the app to work on the desktop; could you elaborate on that? How do I do that?
I’ve just been struggling with this exact same problem as you two for the entire day (@LessW2020) : _pickle.UnpicklingError: invalid load key, ‘<’.
I was using Google Colab to train the model and strangely I think it was that I right-click downloaded the exported .pkl file from Colab and then re-uploaded again to Google Drive from my desktop. When I drag and dropped the file directly into the mounted Google Drive folder using the Colab interface and shared that file afterwards, the render build worked.
Perhaps the downloading/uploading to Google Drive in that way corrupted the pickle file which gave this error.
Thanks Mike! Do you mind sharing your python file code? I tried Colab but I couldn’t figure out the proper filepaths. (And I assume you put your .pkl file in the Colab “sample_data” folder?)
Which python code do you need? From Colab or the render deployment? In Colab I just exported the learner without giving it a specific name using learn.export()
which places the “export.pkl” file in the working directory (this was the default /content
folder). Then I just drag n dropped the “export.pkl” file from there to the folder I wanted it to be in in my Google Drive that I had already mounted in the normal way as below (i.e. to the project folder I had already created in Google Drive):
from google.colab import drive
drive.mount('/content/drive')
Thanks! Did you make any changes to the server.py file in the app folder?
In this case yes, as I’m using fastai-v2. So to get the render deployment working (in addition to the method mentioned above re drag n drop of export.pkl->Google Drive within Colab rather than download), I updated the files as follows.
requirements.txt - dependencies must match those in the Colab environment you trained the model in, as stated earlier in the thread by others. In my case:
aiofiles==0.4.0
aiohttp==3.5.4
asyncio==3.4.3
fastai==1.0.61
fastai2==0.0.17
fastcore==0.1.18
https://download.pytorch.org/whl/cu101/torch-1.5.1%2Bcu101-cp37-cp37m-linux_x86_64.whl
https://download.pytorch.org/whl/cu101/torchvision-0.6.1%2Bcu101-cp37-cp37m-linux_x86_64.whl
ipykernel==4.10.1
numpy==1.18.5
starlette==0.12.0
uvicorn==0.7.1
Pillow==7.0.0
python-multipart==0.0.5
server.py - a few small changes to imported libraries and prediction function (in addition to the Gdrive direct download URL, labels, “export.pkl” filename as necessary):
import aiohttp
import asyncio
import uvicorn
from fastai2 import *
from fastai2.vision.all import *
from io import BytesIO
from starlette.applications import Starlette
from starlette.middleware.cors import CORSMiddleware
from starlette.responses import HTMLResponse, JSONResponse
from starlette.staticfiles import StaticFiles
export_file_url = 'GOOGLE DRIVE URL'
export_file_name = 'export.pkl'
classes = ['YOURLABEL1', 'YOURLABEL2', 'ETC.']
path = Path(__file__).parent
app = Starlette()
app.add_middleware(CORSMiddleware, allow_origins=['*'], allow_headers=['X-Requested-With', 'Content-Type'])
app.mount('/static', StaticFiles(directory='app/static'))
async def download_file(url, dest):
if dest.exists(): return
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
data = await response.read()
with open(dest, 'wb') as f:
f.write(data)
async def setup_learner():
await download_file(export_file_url, path / export_file_name)
try:
print("File exists?:",os.path.exists(path/export_file_name))
learn = load_learner(path/export_file_name)
return learn
except RuntimeError as e:
if len(e.args) > 0 and 'CPU-only machine' in e.args[0]:
print(e)
message = "\n\nThis model was trained with an old version of fastai and will not work in a CPU environment.\n\nPlease update the fastai library in your training environment and export your model again.\n\nSee instructions for 'Returning to work' at https://course.fast.ai."
raise RuntimeError(message)
else:
raise
loop = asyncio.get_event_loop()
tasks = [asyncio.ensure_future(setup_learner())]
learn = loop.run_until_complete(asyncio.gather(*tasks))[0]
loop.close()
@app.route('/')
async def homepage(request):
html_file = path / 'view' / 'index.html'
return HTMLResponse(html_file.open().read())
@app.route('/analyze', methods=['POST'])
async def analyze(request):
img_data = await request.form()
img_bytes = await (img_data['file'].read())
pred = learn.predict(img_bytes)
return JSONResponse({'result': str(pred[0])})
if __name__ == '__main__':
if 'serve' in sys.argv:
uvicorn.run(app=app, host='0.0.0.0', port=5000, log_level="info")
Hope this helps.
Hi Adam_mehdi hope your well!
Basically you create a viritual environment on pc or mac
Copy the repository to that directory
Run pip install -r requirements.txt
See posts on this thread relating to ‘pip list’ and ediiting server.py
Once you resolve any library issues run
python app/server.py serve
This will return an webserver address that you enter in the browser.
You can then test your model in the browser.
Once you know it’s working deploying on render.com will be much easier.
Cheers mrfabulous1
Hi, so I’m trying to use the Render app, but I’ve been getting this error:
#10 [6/6] RUN python app/server.py
Jul 2 08:14:29 PM #10 1.804 Traceback (most recent call last):
Jul 2 08:14:29 PM #10 1.804 File "app/server.py", line 48, in <module>
Jul 2 08:14:29 PM #10 1.804 learn = loop.run_until_complete(asyncio.gather(*tasks))[0]
Jul 2 08:14:29 PM #10 1.804 File "/usr/local/lib/python3.7/asyncio/base_events.py", line 587, in run_until_complete
Jul 2 08:14:29 PM #10 1.804 return future.result()
Jul 2 08:14:29 PM #10 1.804 File "app/server.py", line 33, in setup_learner
Jul 2 08:14:29 PM #10 1.804 await download_file(export_file_url, path / export_file_name)
Jul 2 08:14:29 PM #10 1.804 File "app/server.py", line 26, in download_file
Jul 2 08:14:29 PM #10 1.804 async with session.get(url) as response:
Jul 2 08:14:29 PM #10 1.804 File "/usr/local/lib/python3.7/site-packages/aiohttp/client.py", line 1005, in __aenter__
Jul 2 08:14:29 PM #10 1.804 self._resp = await self._coro
Jul 2 08:14:29 PM #10 1.804 File "/usr/local/lib/python3.7/site-packages/aiohttp/client.py", line 466, in _request
Jul 2 08:14:29 PM #10 1.804 ssl=ssl, proxy_headers=proxy_headers, traces=traces)
Jul 2 08:14:29 PM #10 1.804 File "/usr/local/lib/python3.7/site-packages/aiohttp/client_reqrep.py", line 286, in __init__
Jul 2 08:14:29 PM #10 1.804 self.update_host(url)
Jul 2 08:14:29 PM #10 1.804 File "/usr/local/lib/python3.7/site-packages/aiohttp/client_reqrep.py", line 340, in update_host
Jul 2 08:14:29 PM #10 1.804 raise InvalidURL(url)
Jul 2 08:14:29 PM #10 1.804 aiohttp.client_exceptions.InvalidURL
Jul 2 08:14:29 PM #10 ERROR: executor failed running [/bin/sh -c python app/server.py]: buildkit-runc did not terminate successfully
Jul 2 08:14:29 PM ------
Jul 2 08:14:29 PM > [6/6] RUN python app/server.py:
Jul 2 08:14:29 PM ------
Jul 2 08:14:29 PM error: failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c python app/server.py]: buildkit-runc did not terminate successfully
Jul 2 08:14:29 PM error: exit status 1
I’m still trying to figure out how web apps are constructed, so I apologize if there’s an obvious fix for this.
Hi hope all is well and you are having a jolly day!
The error above means that there is an error when your program is starting up.
Unfortunately this error is generated on the cloud server by Docker and doesn’t really pinpoint the error in the app which could be the source of the problem.
There have only been two ways to solve this problem.
-
Ensuring you carry the correct changes to requirements.txt using pip list and amending the server.py for your version of the .pkl model file. (please see cberkner posts for the process).
-
The second way is to test the app on your desktop/laptop first, get it working, then deploy it on render.com see this post Deployment Platform: Render ✅ for how I deploy all my apps on my Macbook Pro. before deploying them in the cloud.
If you do resolve this error, it would be great if you post the cause or how you solved it, so we can all benefit.
Cheers mrfabulous1
Hi Mikful hope you are having a great day!
Thanks for posting your deployment comments. This will definitely help people in the future as I believe from August 2020 fastai1 will be no more. which means the teddy bear repository on render.com won’t be correct anymore and people will need to make the amendments you have made.
Cheers mrfabulous1
So glad I stumbled upon this thread as I was struggling for the last few days to do an initial deployment of my Nature Cat character classification webapp. I am glad to say I was finally able to deploy using Render after reading and playing with all the changes for requirements.txt and server.py files.
Special thanks to @mrfabulous1 for helping us newbies.
https://naturecat.onrender.com/ is live for the time being.
Here is what I used for Requirements.txt (may not be valid for long)
aiofiles==0.4.0
aiohttp==3.5.4
asyncio==3.4.3
fastai==1.0.60
torch==1.4.0
torchvision == 0.5.0
numpy==1.16.3
pillow~=6.0
python-multipart==0.0.5
starlette==0.12.0
uvicorn==0.7.1
Hi @mrfabulous1. I went ahead and tried changing the requirements a few times to try to get them to match the version from Kaggle, but I keep getting the same error. I’m also running into issues installing older versions of torch on my machine, so I might just need to retrain my model on Gradient or something.
Hi, I’ve been getting the same
Jul 5 04:48:18 PM #10 ERROR: executor failed running [/bin/sh
-c python app/server.py]: buildkit-runc did not terminate successfully
Jul 5 04:48:18 PM ------
Jul 5 04:48:18 PM > [6/6] RUN python app/server.py:
Jul 5 04:48:18 PM ------
Jul 5 04:48:18 PM error: failed to solve: rpc error: code =
Unknown desc = executor failed running [/bin/sh -c python app/server.py]: buildkit-runc did not terminate successfully
error when I try to deploy in render that everyone else is getting. I am going to look for alternative ways to deploy my neural net unless someone can spot something amiss in the requirements.txt
file I currently have and the !pip list
from google colab:
requirements.txt
:
aiofiles==0.4.0
aiohttp==3.5.4
asyncio==3.4.3
fastai==1.0.61
numpy==1.18.5
Pillow==7.0.0
python-multipart==0.0.5
starlette==0.13.4
uvicorn==0.11.5
torch==1.4.0
torchvision==0.5.0
and my result of calling pip list
:
pip list:
Package Version
------------------------ ---------------
absl-py 0.9.0
aiofiles 0.5.0
aiohttp 3.6.2
alabaster 0.7.12
albumentations 0.1.12
altair 4.1.0
asgiref 3.2.10
astor 0.8.1
astropy 4.0.1.post1
astunparse 1.6.3
async-timeout 3.0.1
atari-py 0.2.6
atomicwrites 1.4.0
attrs 19.3.0
audioread 2.1.8
autograd 1.3
Babel 2.8.0
backcall 0.2.0
beautifulsoup4 4.6.3
bleach 3.1.5
blis 0.4.1
bokeh 1.4.0
boto 2.49.0
boto3 1.14.9
botocore 1.17.9
Bottleneck 1.3.2
branca 0.4.1
bs4 0.0.1
CacheControl 0.12.6
cachetools 4.1.0
catalogue 1.0.0
certifi 2020.6.20
cffi 1.14.0
chainer 6.5.0
chardet 3.0.4
click 7.1.2
cloudpickle 1.3.0
cmake 3.12.0
cmdstanpy 0.4.0
colorlover 0.3.0
community 1.0.0b1
contextlib2 0.5.5
convertdate 2.2.1
coverage 3.7.1
coveralls 0.5
crcmod 1.7
cufflinks 0.17.3
cupy-cuda101 6.5.0
cvxopt 1.2.5
cvxpy 1.0.31
cycler 0.10.0
cymem 2.0.3
Cython 0.29.20
daft 0.0.4
dask 2.12.0
dataclasses 0.7
datascience 0.10.6
decorator 4.4.2
defusedxml 0.6.0
descartes 1.1.0
dill 0.3.2
distributed 1.25.3
Django 3.0.7
dlib 19.18.0
docopt 0.6.2
docutils 0.15.2
dopamine-rl 1.0.5
earthengine-api 0.1.226
easydict 1.9
ecos 2.0.7.post1
editdistance 0.5.3
en-core-web-sm 2.2.5
entrypoints 0.3
ephem 3.7.7.1
et-xmlfile 1.0.1
fa2 0.3.5
fancyimpute 0.4.3
fastai 1.0.61
fastdtw 0.3.4
fastprogress 0.2.3
fastrlock 0.5
fbprophet 0.6
feather-format 0.4.1
featuretools 0.4.1
filelock 3.0.12
firebase-admin 4.1.0
fix-yahoo-finance 0.0.22
Flask 1.1.2
folium 0.8.3
fsspec 0.7.4
future 0.16.0
gast 0.3.3
GDAL 2.2.2
gdown 3.6.4
gensim 3.6.0
geographiclib 1.50
geopy 1.17.0
gin-config 0.3.0
glob2 0.7
google 2.0.3
google-api-core 1.16.0
google-api-python-client 1.7.12
google-auth 1.17.2
google-auth-httplib2 0.0.3
google-auth-oauthlib 0.4.1
google-cloud-bigquery 1.21.0
google-cloud-core 1.0.3
google-cloud-datastore 1.8.0
google-cloud-firestore 1.7.0
google-cloud-language 1.2.0
google-cloud-storage 1.18.1
google-cloud-translate 1.5.0
google-colab 1.0.0
google-pasta 0.2.0
google-resumable-media 0.4.1
googleapis-common-protos 1.52.0
googledrivedownloader 0.4
graphviz 0.10.1
grpcio 1.30.0
gspread 3.0.1
gspread-dataframe 3.0.7
gym 0.17.2
h11 0.9.0
h5py 2.10.0
HeapDict 1.0.1
holidays 0.9.12
html5lib 1.0.1
httpimport 0.5.18
httplib2 0.17.4
httplib2shim 0.0.3
httptools 0.1.1
humanize 0.5.1
hyperopt 0.1.2
ideep4py 2.0.0.post3
idna 2.9
idna-ssl 1.1.0
image 1.5.32
imageio 2.4.1
imagesize 1.2.0
imbalanced-learn 0.4.3
imblearn 0.0
imgaug 0.2.9
importlib-metadata 1.6.1
imutils 0.5.3
inflect 2.1.0
intel-openmp 2020.0.133
intervaltree 2.1.0
ipykernel 4.10.1
ipython 5.5.0
ipython-genutils 0.2.0
ipython-sql 0.3.9
ipywidgets 7.5.1
itsdangerous 1.1.0
jax 0.1.69
jaxlib 0.1.47
jdcal 1.4.1
jedi 0.17.1
jieba 0.42.1
Jinja2 2.11.2
jmespath 0.10.0
joblib 0.15.1
jpeg4py 0.1.4
jsonschema 2.6.0
jupyter 1.0.0
jupyter-client 5.3.4
jupyter-console 5.2.0
jupyter-core 4.6.3
kaggle 1.5.6
kapre 0.1.3.1
Keras 2.3.1
Keras-Applications 1.0.8
Keras-Preprocessing 1.1.2
keras-vis 0.4.1
kiwisolver 1.2.0
knnimpute 0.1.0
librosa 0.6.3
lightgbm 2.2.3
llvmlite 0.31.0
lmdb 0.98
lucid 0.3.8
LunarCalendar 0.0.9
lxml 4.2.6
Markdown 3.2.2
MarkupSafe 1.1.1
matplotlib 3.2.2
matplotlib-venn 0.11.5
missingno 0.4.2
mistune 0.8.4
mizani 0.6.0
mkl 2019.0
mlxtend 0.14.0
more-itertools 8.4.0
moviepy 0.2.3.5
mpmath 1.1.0
msgpack 1.0.0
multidict 4.7.6
multiprocess 0.70.10
multitasking 0.0.9
murmurhash 1.0.2
music21 5.5.0
natsort 5.5.0
nbconvert 5.6.1
nbformat 5.0.7
networkx 2.4
nibabel 3.0.2
nltk 3.2.5
notebook 5.2.2
np-utils 0.5.12.1
numba 0.48.0
numexpr 2.7.1
numpy 1.18.5
nvidia-ml-py3 7.352.0
oauth2client 4.1.3
oauthlib 3.1.0
okgrade 0.4.3
opencv-contrib-python 4.1.2.30
opencv-python 4.1.2.30
openpyxl 2.5.9
opt-einsum 3.2.1
osqp 0.6.1
packaging 20.4
palettable 3.3.0
pandas 1.0.5
pandas-datareader 0.8.1
pandas-gbq 0.11.0
pandas-profiling 1.4.1
pandocfilters 1.4.2
parso 0.7.0
pathlib 1.0.1
patsy 0.5.1
pexpect 4.8.0
pickleshare 0.7.5
Pillow 7.0.0
pip 19.3.1
pip-tools 4.5.1
plac 1.1.3
plotly 4.4.1
plotnine 0.6.0
pluggy 0.7.1
portpicker 1.3.1
prefetch-generator 1.0.1
preshed 3.0.2
prettytable 0.7.2
progressbar2 3.38.0
prometheus-client 0.8.0
promise 2.3
prompt-toolkit 1.0.18
protobuf 3.10.0
psutil 5.4.8
psycopg2 2.7.6.1
ptyprocess 0.6.0
py 1.8.2
pyarrow 0.14.1
pyasn1 0.4.8
pyasn1-modules 0.2.8
pycocotools 2.0.1
pycparser 2.20
pydata-google-auth 1.1.0
pydot 1.3.0
pydot-ng 2.0.0
pydotplus 2.0.2
PyDrive 1.3.1
pyemd 0.5.1
pyglet 1.5.0
Pygments 2.1.3
pygobject 3.26.1
pymc3 3.7
PyMeeus 0.3.7
pymongo 3.10.1
pymystem3 0.2.0
PyOpenGL 3.1.5
pyparsing 2.4.7
pyrsistent 0.16.0
pysndfile 1.3.8
PySocks 1.7.1
pystan 2.19.1.1
pytest 3.6.4
python-apt 1.6.5+ubuntu0.3
python-chess 0.23.11
python-dateutil 2.8.1
python-louvain 0.14
python-multipart 0.0.5
python-slugify 4.0.0
python-utils 2.4.0
pytz 2018.9
PyWavelets 1.1.1
PyYAML 3.13
pyzmq 19.0.1
qtconsole 4.7.5
QtPy 1.9.0
regex 2019.12.20
requests 2.23.0
requests-oauthlib 1.3.0
resampy 0.2.2
retrying 1.3.3
rpy2 3.2.7
rsa 4.6
s3fs 0.4.2
s3transfer 0.3.3
scikit-image 0.16.2
scikit-learn 0.22.2.post1
scipy 1.4.1
screen-resolution-extra 0.0.0
scs 2.1.2
seaborn 0.10.1
Send2Trash 1.5.0
setuptools 47.3.1
setuptools-git 1.2
Shapely 1.7.0
simplegeneric 0.8.1
six 1.12.0
sklearn 0.0
sklearn-pandas 1.8.0
smart-open 2.0.0
snowballstemmer 2.0.0
sortedcontainers 2.2.2
spacy 2.2.4
Sphinx 1.8.5
sphinxcontrib-websupport 1.2.2
SQLAlchemy 1.3.17
sqlparse 0.3.1
srsly 1.0.2
starlette 0.13.4
statsmodels 0.10.2
sympy 1.1.1
tables 3.4.4
tabulate 0.8.7
tbb 2020.0.133
tblib 1.6.0
tensorboard 2.2.2
tensorboard-plugin-wit 1.6.0.post3
tensorboardcolab 0.0.22
tensorflow 2.2.0
tensorflow-addons 0.8.3
tensorflow-datasets 2.1.0
tensorflow-estimator 2.2.0
tensorflow-gcs-config 2.2.0
tensorflow-hub 0.8.0
tensorflow-metadata 0.22.2
tensorflow-privacy 0.2.2
tensorflow-probability 0.10.0
termcolor 1.1.0
terminado 0.8.3
testpath 0.4.4
text-unidecode 1.3
textblob 0.15.3
textgenrnn 1.4.1
Theano 1.0.4
thinc 7.4.0
tifffile 2020.6.3
toolz 0.10.0
torch 1.4.0
torchsummary 1.5.1
torchtext 0.3.1
torchvision 0.5.0
tornado 4.5.3
tqdm 4.41.1
traitlets 4.3.3
tweepy 3.6.0
typeguard 2.7.1
typing 3.6.6
typing-extensions 3.6.6
tzlocal 1.5.1
umap-learn 0.4.4
uritemplate 3.0.1
urllib3 1.24.3
uvicorn 0.11.5
uvloop 0.14.0
vega-datasets 0.8.0
wasabi 0.7.0
wcwidth 0.2.5
webencodings 0.5.1
websockets 8.1
Werkzeug 1.0.1
wheel 0.34.2
widgetsnbextension 3.5.1
wordcloud 1.5.0
wrapt 1.12.1
xarray 0.15.1
xgboost 0.90
xkit 0.0.0
xlrd 1.1.0
xlwt 1.3.0
yarl 1.4.2
yellowbrick 0.9.1
zict 2.0.0
zipp 3.1.0
It’s amazing the help @mrfabulous1 and @Mikful that you have provided to everyone here so far, but from the two painful hours I’ve spent on these issues this afternoon, I have to agree with @cberkner when he says
I do think that Fast.ai should remove Render as a recommended platform for this purpose
Hi sarahgood, arthurconmy hope your both having a wonderful day!
-
If you think your model is working then I suggest you contact render.com support for some support at the very least they should be able to help or tell you what the problem is and you can then share it on the forum.
-
I have deployed over 70 classifiers since I started using fast.ai but I always test them on my desktop before deploying on the web. I currently have them running with different versions running of all the libraries including torch and torchvision going back over a year ago.
-
I was able to deploy cberkner, model Deployment Platform: Render ✅. If you are willing to share your pip list and model I will check your models also.
-
I think you should both try and deploy your models on other platforms and then come back and share your experiences with others. I originally started using render.com as it was easy and I found other deployments to difficult.
-
On this page https://course.fast.ai/ under production there are a number of other platforms that you can try. I also kwow that people have used heroku.com. Let us know which one you choose if you do so and whether it was easy or not.
-
Also bear in mind that Mikful and gkumarg both managed to deploy their models, though they both had to do a bit of work to get it going.
Hope this helps.
Cheers mrfabulous1
How do you find out the dependencies in the Colab environment? I don’t find it.