ansys / pytwin

Ansys Digital Twin repository
https://twin.docs.pyansys.com
MIT License
19 stars 7 forks source link

Unable to generate ROM images with embedded ROM Viewer #109

Closed sergioschena-db closed 1 year ago

sergioschena-db commented 1 year ago

🔍 Before submitting the issue

🐞 Description of the bug

Running the 3D Field Rom example, I am facing some errors related to the point cloud-based ROM Viewer embedded in the twin runtime.

When the model is initialised and the first output is updated, with the following code:

twin_model = TwinModel(twin_file)

twin_model.initialize_evaluation(inputs=rom_inputs, parameters=rom_parameters)

rom_name = twin_model.tbrom_names[0]
rom_directory = twin_model.get_rom_directory(rom_name)
snapshot = twin_model.get_snapshot_filepath(rom_name)
geometry = twin_model.get_geometry_filepath(rom_name)

temperature_file = snapshot_to_cfd(snapshot, geometry, "temperature", os.path.join(rom_directory, "cfd_file.ip"))

the following errors are logged:

dlopen1:libEGL.so.1: cannot open shared object file: No such file or directory
dlopen2:./RomViewerSharedLib.so: cannot open shared object file: No such file or directory

I can also find the following lines logged in the model log file:

[INFO] [ThermalTBROM_23R1SP1] [EXTME2][ThermalROM23R1_1][ThermalROM23R1_1][ThermalROM23R1_1] SetupExperiment [t = 0s] [Aug 16, 2023 02:50:04 PM]
[INFO] [ThermalTBROM_23R1SP1] [ME2FMU][ThermalROM23R1_1][ThermalROM23R1_1] fmi2EnterInitializationMode [t = 0s] [Aug 16, 2023 02:50:04 PM]
[INFO] [ThermalTBROM_23R1SP1] [ME2FMU][ThermalROM23R1_1][ThermalROM23R1_1] RomViewerSharedLib instance:00000000
 [t = 0s] [Aug 16, 2023 02:50:04 PM]
[WARNING] [ThermalTBROM_23R1SP1] [ME2FMU][ThermalROM23R1_1][ThermalROM23R1_1] Cannot Load RomViewer Library => unable to render figures... [t = 0s] [Aug 16, 2023 02:50:04 PM]

As a consequence, no image file is generated in the ROM directory and the following cell fails to display the image:

view_name = twin_model.get_available_view_names(rom_name)[0]
image_filepath = twin_model.get_image_filepath(rom_name, view_name)
plt.imshow(img.imread(image_filepath))
plt.show()

I suppose that some .so are missing and I was expecting them to be installed with the pytwin package, as this ROM viewer should be embedded in the runtime.

📝 Steps to reproduce

In a fresh environment, i.e. without any specific library added to the classpath, install pytwin and then run the 3D Field ROM example.

💻 Which operating system are you using?

Linux

📀 Which ANSYS version are you using?

0.3.0

🐍 Which Python version are you using?

3.10

📦 Installed packages

absl-py==1.0.0
accelerate==0.19.0
aiohttp==3.8.4
aiosignal==1.3.1
appdirs==1.4.4
argon2-cffi==21.3.0
argon2-cffi-bindings==21.2.0
astor==0.8.1
asttokens==2.2.1
astunparse==1.6.3
async-timeout==4.0.2
attrs==21.4.0
audioread==3.0.0
azure-core==1.27.1
azure-cosmos==4.3.1b1
azure-storage-blob==12.17.0b1
azure-storage-file-datalake==12.11.0
backcall==0.2.0
bcrypt==3.2.0
beautifulsoup4==4.11.1
black==22.6.0
bleach==4.1.0
blinker==1.4
blis==0.7.9
boto3==1.24.28
botocore==1.27.28
cachetools==4.2.4
catalogue==2.0.8
category-encoders==2.6.0
certifi==2022.9.14
cffi==1.15.1
chardet==4.0.0
charset-normalizer==2.0.4
click==8.0.4
cloudpickle==2.0.0
cmdstanpy==1.1.0
confection==0.0.4
configparser==5.2.0
convertdate==2.4.0
cryptography==37.0.1
cycler==0.11.0
cymem==2.0.7
Cython==0.29.32
dacite==1.8.1
databricks-automl-runtime==0.2.16
databricks-cli==0.17.7
databricks-feature-store==0.13.5
databricks-sdk==0.1.6
dataclasses-json==0.5.8
datasets==2.12.0
dbl-tempo==0.1.23
dbus-python==1.2.18
debugpy==1.5.1
decorator==5.1.1
defusedxml==0.7.1
dill==0.3.4
diskcache==5.6.1
distlib==0.3.6
distro==1.7.0
distro-info===1.1build1
docstring-to-markdown==0.12
entrypoints==0.4
ephem==4.1.4
evaluate==0.4.0
executing==1.2.0
facets-overview==1.0.3
fastjsonschema==2.17.1
fasttext==0.9.2
filelock==3.6.0
Flask @ https://databricks-build-artifacts-manual-staging.s3.amazonaws.com/flask/Flask-1.1.2%2Bdb1-py2.py3-none-any.whl?AWSAccessKeyId=AKIAX7HWM34HCSVHYQ7M&Expires=2001354391&Signature=bztIumr2jXFbisF0QicZvqbvT9s%3D
flatbuffers==23.5.26
fonttools==4.25.0
frozenlist==1.3.3
fsspec==2022.7.1
future==0.18.2
gast==0.4.0
gitdb==4.0.10
GitPython==3.1.27
google-api-core==2.8.2
google-auth==1.33.0
google-auth-oauthlib==0.4.6
google-cloud-core==2.3.2
google-cloud-storage==2.9.0
google-crc32c==1.5.0
google-pasta==0.2.0
google-resumable-media==2.5.0
googleapis-common-protos==1.56.4
greenlet==1.1.1
grpcio==1.48.1
grpcio-status==1.48.1
gunicorn==20.1.0
gviz-api==1.10.0
h5py==3.7.0
holidays==0.25
horovod==0.28.0
htmlmin==0.1.12
httplib2==0.20.2
huggingface-hub==0.15.1
idna==3.3
ImageHash==4.3.1
imbalanced-learn==0.8.1
importlib-metadata==4.11.3
importlib-resources==5.12.0
ipykernel==6.17.1
ipython==8.10.0
ipython-genutils==0.2.0
ipywidgets==7.7.2
isodate==0.6.1
itsdangerous==2.0.1
jedi==0.18.1
jeepney==0.7.1
Jinja2==2.11.3
jmespath==0.10.0
joblib==1.2.0
joblibspark==0.5.1
jsonschema==4.16.0
jupyter-client==7.3.4
jupyter_core==4.11.2
jupyterlab-pygments==0.1.2
jupyterlab-widgets==1.0.0
keras==2.11.0
keyring==23.5.0
kiwisolver==1.4.2
korean-lunar-calendar==0.3.1
langchain==0.0.181
langcodes==3.3.0
launchpadlib==1.10.16
lazr.restfulclient==0.14.4
lazr.uri==1.0.6
lazy_loader==0.2
libclang==15.0.6.1
librosa==0.10.0
lightgbm==3.3.5
llvmlite==0.38.0
LunarCalendar==0.0.9
Mako==1.2.0
Markdown==3.3.4
MarkupSafe==2.0.1
marshmallow==3.19.0
marshmallow-enum==1.5.1
matplotlib==3.5.2
matplotlib-inline==0.1.6
mccabe==0.7.0
mistune==0.8.4
mleap==0.20.0
mlflow-skinny==2.4.2
more-itertools==8.10.0
msgpack==1.0.5
multidict==6.0.4
multimethod==1.9.1
multiprocess==0.70.12.2
murmurhash==1.0.9
mypy-extensions==0.4.3
nbclient==0.5.13
nbconvert==6.4.4
nbformat==5.5.0
nest-asyncio==1.5.5
networkx==2.8.4
ninja==1.11.1
nltk==3.7
nodeenv==1.8.0
notebook==6.4.12
numba==0.55.1
numexpr==2.8.4
numpy==1.21.5
oauthlib==3.2.0
openai==0.27.7
openapi-schema-pydantic==1.2.4
opt-einsum==3.3.0
packaging==21.3
pandas==1.4.4
pandocfilters==1.5.0
paramiko==2.9.2
parso==0.8.3
pathspec==0.9.0
pathy==0.10.1
patsy==0.5.2
petastorm==0.12.1
pexpect==4.8.0
phik==0.12.3
pickleshare==0.7.5
Pillow==9.2.0
platformdirs==2.5.2
plotly==5.9.0
pluggy==1.0.0
pmdarima==2.0.3
pooch==1.7.0
preshed==3.0.8
prometheus-client==0.14.1
prompt-toolkit==3.0.36
prophet==1.1.3
protobuf==3.19.4
psutil==5.9.0
psycopg2==2.9.3
ptyprocess==0.7.0
pure-eval==0.2.2
pyarrow==8.0.0
pyasn1==0.4.8
pyasn1-modules==0.2.8
pybind11==2.10.4
pycparser==2.21
pydantic==1.10.6
pyflakes==3.0.1
Pygments==2.11.2
PyGObject==3.42.1
PyJWT==2.3.0
PyMeeus==0.5.12
PyNaCl==1.5.0
pyodbc==4.0.32
pyparsing==3.0.9
pyright==1.1.294
pyrsistent==0.18.0
pytesseract==0.3.10
python-apt==2.4.0+ubuntu1
python-dateutil==2.8.2
python-editor==1.0.4
python-lsp-jsonrpc==1.0.0
python-lsp-server==1.7.1
pytoolconfig==1.2.2
pytwin==0.3.0
pytz==2022.1
PyWavelets==1.3.0
PyYAML==6.0
pyzmq==23.2.0
regex==2022.7.9
requests==2.28.1
requests-oauthlib==1.3.1
responses==0.18.0
rope==1.7.0
rsa==4.9
s3transfer==0.6.0
scikit-learn==1.1.1
scipy==1.9.1
seaborn==0.11.2
SecretStorage==3.3.1
Send2Trash==1.8.0
sentence-transformers==2.2.2
sentencepiece==0.1.99
shap==0.41.0
simplejson==3.17.6
six==1.16.0
slicer==0.0.7
smart-open==5.2.1
smmap==5.0.0
soundfile==0.12.1
soupsieve==2.3.1
soxr==0.3.5
spacy==3.5.3
spacy-legacy==3.0.12
spacy-loggers==1.0.4
spark-tensorflow-distributor==1.0.0
SQLAlchemy==1.4.39
sqlparse==0.4.2
srsly==2.4.6
ssh-import-id==5.11
stack-data==0.6.2
statsmodels==0.13.2
tabulate==0.8.10
tangled-up-in-unicode==0.2.0
tenacity==8.1.0
tensorboard==2.11.0
tensorboard-data-server==0.6.1
tensorboard-plugin-profile==2.11.2
tensorboard-plugin-wit==1.8.1
tensorflow-cpu==2.11.1
tensorflow-estimator==2.11.0
tensorflow-io-gcs-filesystem==0.32.0
termcolor==2.3.0
terminado==0.13.1
testpath==0.6.0
thinc==8.1.10
threadpoolctl==2.2.0
tiktoken==0.4.0
tokenize-rt==4.2.1
tokenizers==0.13.3
tomli==2.0.1
torch==1.13.1+cpu
torchvision==0.14.1+cpu
tornado==6.1
tqdm==4.64.1
traitlets==5.1.1
transformers==4.29.2
typeguard==2.13.3
typer==0.7.0
typing-inspect==0.9.0
typing_extensions==4.3.0
ujson==5.4.0
unattended-upgrades==0.1
urllib3==1.26.11
virtualenv==20.16.3
visions==0.7.5
wadllib==1.3.6
wasabi==1.1.2
wcwidth==0.2.5
webencodings==0.5.1
websocket-client==0.58.0
Werkzeug==2.0.3
whatthepatch==1.0.2
widgetsnbextension==3.6.1
wordcloud==1.9.2
wrapt==1.14.1
xgboost==1.7.5
xxhash==3.2.0
yapf==0.31.0
yarl==1.9.2
ydata-profiling==4.2.0
zipp==3.8.0
lboucin commented 1 year ago

Hello @sergioschena-db,

Thanks for creating this issue and apologizes for the very late answer!

The issue may have two root causes:

sergioschena-db commented 1 year ago

Thanks @lboucin for your answer.

I am on Ubuntu 22.04.2 LTS. I have installed libosmesa6, but still getting the same dlopen errors. I think the problem is the missing libEGL.so.1.

I have also tried by installing some packages installing ligEGL.so (e.g. libegl1, libegl1-mesa). I don't have anymore the dlopen errors, but now I have

Graphical Error in initGLContextAndFrameBuffer_t: context fail:

Any advice you can give me here ?

lboucin commented 1 year ago

Hi @sergioschena-db, thanks for your fast answer!

I've made some tests yesterday (with branch issue109/bug755776) and I do reproduce the same initGLContextAndFrameBuffer_t error, when installing libegl1. I think the issue is that our RomViewerSharedLib.so depends on libEGL, which is useless for offscreen png rendering. This BUG has been fixed with Twin Builder 23R2 release (see below) image but I still have to update the twin model from our example data repo (that is downloaded at the beginning of the pytwin example script).

I'll ping you once it is done, and that would be very nice of you if you could give it a try and post your feedback here.

Thanks BR/L.

sergioschena-db commented 1 year ago

@lboucin Will I have to wait for a new release of pytwin to have Twin Builder 23R2 ?

lboucin commented 1 year ago

@sergioschena-db nope, you should be able to keep using 0.3.0

Ansys Twin Builder is the software that let you create a twin model and export it under a twin file, while pytwin is one way of consuming it. Once I will have updated the twin file on our example data repo, you should be able to evaluate it with pytwin 0.3.0.

That said, a new release of pytwin (0.4.0) with better support of our ROM with field input and/or output will be available very soon (you may have a look at the new example in pytwin dev doc).

sergioschena-db commented 1 year ago

Great! I thought an update of the TwinRuntimeSDK bundled with pytwin was needed. @lboucin Let me know when I can test again and if I still need to install libosmesa6.

sergioschena-db commented 1 year ago

@lboucin any update on the example file for pytwin based on 23R2 ?

lboucin commented 1 year ago

Hello @sergioschena-db,

I'm sorry for the long answer delay. But good news: I've uploaded a new twin file (see ThermalTBROM_23R2.twin) for this example, that has the right RomViewerSharedLib.so library without the legacy dependencies to the libGL*.so libraries.

PyTwin now unit tests this new twin file and successfully runs image generation with it on Github Ubuntu 20.04 runners (see PR119).

To try it on your side, could you please:

That should solve the issue you encountered.

Could you please try these two steps and tell me if the issue is solved on your side too?

Thanks once more for your patience in letting us solve this issue.

BR/L.

sergioschena-db commented 1 year ago

It works ! Thanks @lboucin !