pb débutant avec python

xorian

Membre confirmé
16 Juin 2020
10
0
58
Bonjour,
Je ne suis pas du tout programmeur mais je désire essayer python et plus spécialement la génération de texte en intelligence artificielle via GPT-2.
Je me suis donc référé au tutorial suivant : https://danevanderbilt.com/2019/11/13/how-to-run-openais-gpt-2-text-generator-on-macos/
Tout s'est bien passé (via le terminal) jusqu'à la commande suivante :
def interact_model(
model_name='345M',
seed=None,
nsamples=1,
batch_size=1,
length=None,
temperature=1,
top_k=40,
top_p=1,
models_dir='models',
):
où le terminal me renvoie l'erreur suivante :
(venv-gpt-2) Mac-mini:gpt-2 xorian$ def interact_model(
-bash: syntax error near unexpected token `('
(venv-gpt-2) Mac-mini:gpt-2 xorian$ model_name='345M',
(venv-gpt-2) Mac-mini:gpt-2 xorian$ seed=None,
(venv-gpt-2) Mac-mini:gpt-2 xorian$ nsamples=1,
(venv-gpt-2) Mac-mini:gpt-2 xorian$ batch_size=1,
(venv-gpt-2) Mac-mini:gpt-2 xorian$ length=None,
(venv-gpt-2) Mac-mini:gpt-2 xorian$ temperature=1,
(venv-gpt-2) Mac-mini:gpt-2 xorian$ top_k=40,
(venv-gpt-2) Mac-mini:gpt-2 xorian$ top_p=1,
(venv-gpt-2) Mac-mini:gpt-2 xorian$ models_dir='models',
(venv-gpt-2) Mac-mini:gpt-2 xorian$ ):
-bash: syntax error near unexpected token `)'
1ere question : pourriez vous m'indiquer, svp, ce qu'il ne va pas dans cette commande.Je pense qu'il s'agit de quelque chose de banal (problème de parenthèse ou de ponctuation).
Seconde question en suivant ce tutoriel j'ai donc créé un environnement virtuel (venv-gpt-2).Lorsque que je quitte le terminal puis que je le relance comment dois je faire pour réentrer dans cet environnement virtuel ? Dois je retaper :
1
2
3
4
python3 -m venv ~/venv-gpt-2
. ~/venv-gpt-2/bin/activate
ou simplement la ligne 3 . ~/venv-gpt-2/bin/activate ou autre chose ?
Dernière question : ou puis je trouver sur mon mac le fichier nommé 345M téléchargé via la ligne de commande du terminal.
D'avance merci.
 
Bonjour,

Est ce que tu executes ce code depuis un fichier *.py ?

Dans le tutoriel, ce serait le fichier src/interactive_conditional_samples.py.

Pour la dernière question, il faut regarder dans le fichier download_model.py ce qu'il fait exactement, sinon je presume qu'il sera téléchargé dans le dossier courant de ton terminal.
 
Bonjour,

Est ce que tu execute ce code depuis un fichier *.py ?

Dans le tutoriel, ce serait le fichier src/interactive_conditional_samples.py.
Bonjour Nanardtetard
j'ai installé Python 3 et exécuté les premières commandes du tutoriel jusqu'a
def interact_model(
model_name='345M',
seed=None,
nsamples=1,
batch_size=1,
length=None,
temperature=1,
top_k=40,
top_p=1,
models_dir='models',
):
où le terminal m'a renvoyé l'erreur. Je ne suis donc pas allé plus loin pour l'instant et je n'ai donc pas effectué src/interactive_conditional_samples.py puisque je plante juste avant
 
En fait la partie "Running the model" doit être dans le fichier interactive_conditional_sample.py.
Ils te demandent d'éditer ce fichier py pour correspondre au modele qui a été telechargé juste avant.

Ton erreur vient d'une erreur de syntaxe car tu veux rentrer cette commande ligne par ligne et du coup elle est incomplete.
En utilisant le fichier (préalablement édité) tu n'auras plus de problème.

C'est pourquoi, ils disent ensuite d'executer le fichier avec "python3 src/interactive_machin_truc.py"
 
En fait la partie "Running the model" doit être dans le fichier
En fait la partie "Running the model" doit être dans le fichier interactive_conditional_sample.py.
Ils te demandent d'éditer ce fichier py pour correspondre au modele qui a été telechargé juste avant.

Ton erreur vient d'une erreur de syntaxe car tu veux rentrer cette commande ligne par ligne et du coup elle est incomplete.
En utilisant le fichier (préalablement édité) tu n'auras plus de problème.

C'est pourquoi, ils disent ensuite d'executer le fichier avec "python3 src/interactive_machin_truc.py"

.
Ils te demandent d'éditer ce fichier py pour correspondre au modele qui a été telechargé juste avant.

Ton erreur vient d'une erreur de syntaxe car tu veux rentrer cette commande ligne par ligne et du coup elle est incomplete.
En utilisant le fichier (préalablement édité) tu n'auras plus de problème.

C'est pourquoi, ils disent ensuite d'executer le fichier avec "python3 src/interactive_machin_truc.py"
Si j'exécute via le terminal la commande :
python3 src/interactive_conditional_samples.py

j'obtiens la réponse suivante :
(venv-gpt-2) Mac-mini:gpt-2 xorian$ python3 src/interactive_conditional_samples.py
Illegal instruction: 4
 
Si j'exécute via le terminal la commande :
python3 src/interactive_conditional_samples.py

j'obtiens la réponse suivante :
(venv-gpt-2) Mac-mini:gpt-2 xorian$ python3 src/interactive_conditional_samples.py
Illegal instruction: 4
oui je crois que j'ai compris.Je doit éditer le fichier interactive_conditional_samples.py (via Atom par exemple) et définir les variables.Reste à savoir où je trouve ce fichier sur mon mac.
 
oui je crois que j'ai compris.Je doit éditer le fichier interactive_conditional_samples.py (via Atom par exemple) et définir les variables.Reste à savoir où je trouve ce fichier sur mon mac.

Oui c'est ca.

Je suis allé voir le fichier dowload_model.py sur le GitHub.
Les fichiers téléchargés devraient être present dans le meme repertoire que le fichier download_model.py.
 
Peux tu poster le contenu de ce fichier python ? (Dans des balises "Bloc de code") Merci.
oui merci c'est bon Nanardtetard, j'ai trouvé le fichier sur mon mac et c'est donc bien lui qu'il faut que je modifie le voici (avant modification) :


#!/usr/bin/env python3

import fire
import json
import os
import numpy as np
import tensorflow as tf

import model, sample, encoder

def interact_model(
model_name='124M',
seed=None,
nsamples=1,
batch_size=1,
length=None,
temperature=1,
top_k=0,
top_p=1,
models_dir='models',
):
"""
Interactively run the model
:model_name=124M : String, which model to use
:seed=None : Integer seed for random number generators, fix seed to reproduce
results
:nsamples=1 : Number of samples to return total
:batch_size=1 : Number of batches (only affects speed/memory). Must divide nsamples.
:length=None : Number of tokens in generated text, if None (default), is
determined by model hyperparameters
:temperature=1 : Float value controlling randomness in boltzmann
distribution. Lower temperature results in less random completions. As the
temperature approaches zero, the model will become deterministic and
repetitive. Higher temperature results in more random completions.
:top_k=0 : Integer value controlling diversity. 1 means only 1 word is
considered for each step (token), resulting in deterministic completions,
while 40 means 40 words are considered at each step. 0 (default) is a
special setting meaning no restrictions. 40 generally is a good value.
:models_dir : path to parent folder containing model subfolders
(i.e. contains the <model_name> folder)
"""
models_dir = os.path.expanduser(os.path.expandvars(models_dir))
if batch_size is None:
batch_size = 1
assert nsamples % batch_size == 0

enc = encoder.get_encoder(model_name, models_dir)
hparams = model.default_hparams()
with open(os.path.join(models_dir, model_name, 'hparams.json')) as f:
hparams.override_from_dict(json.load(f))

if length is None:
length = hparams.n_ctx // 2
elif length > hparams.n_ctx:
raise ValueError("Can't get samples longer than window size: %s" % hparams.n_ctx)

with tf.Session(graph=tf.Graph()) as sess:
context = tf.placeholder(tf.int32, [batch_size, None])
np.random.seed(seed)
tf.set_random_seed(seed)
output = sample.sample_sequence(
hparams=hparams, length=length,
context=context,
batch_size=batch_size,
temperature=temperature, top_k=top_k, top_p=top_p
)

saver = tf.train.Saver()
ckpt = tf.train.latest_checkpoint(os.path.join(models_dir, model_name))
saver.restore(sess, ckpt)

while True:
raw_text = input("Model prompt >>> ")
while not raw_text:
print('Prompt should not be empty!')
raw_text = input("Model prompt >>> ")
context_tokens = enc.encode(raw_text)
generated = 0
for _ in range(nsamples // batch_size):
out = sess.run(output, feed_dict={
context: [context_tokens for _ in range(batch_size)]
})[:, len(context_tokens):]
for i in range(batch_size):
generated += 1
text = enc.decode(out)
print("=" * 40 + " SAMPLE " + str(generated) + " " + "=" * 40)
print(text)
print("=" * 80)

if name == 'main':
fire.Fire(interact_model)
 
oui merci c'est bon Nanardtetard, j'ai trouvé le fichier sur mon mac et c'est donc bien lui qu'il faut que je modifie le voici (avant modification) :


#!/usr/bin/env python3

import fire
import json
import os
import numpy as np
import tensorflow as tf

import model, sample, encoder

def interact_model(
model_name='124M',
seed=None,
nsamples=1,
batch_size=1,
length=None,
temperature=1,
top_k=0,
top_p=1,
models_dir='models',
):
"""
Interactively run the model
:model_name=124M : String, which model to use
:seed=None : Integer seed for random number generators, fix seed to reproduce
results
:nsamples=1 : Number of samples to return total
:batch_size=1 : Number of batches (only affects speed/memory). Must divide nsamples.
:length=None : Number of tokens in generated text, if None (default), is
determined by model hyperparameters
:temperature=1 : Float value controlling randomness in boltzmann
distribution. Lower temperature results in less random completions. As the
temperature approaches zero, the model will become deterministic and
repetitive. Higher temperature results in more random completions.
:top_k=0 : Integer value controlling diversity. 1 means only 1 word is
considered for each step (token), resulting in deterministic completions,
while 40 means 40 words are considered at each step. 0 (default) is a
special setting meaning no restrictions. 40 generally is a good value.
:models_dir : path to parent folder containing model subfolders
(i.e. contains the <model_name> folder)
"""
models_dir = os.path.expanduser(os.path.expandvars(models_dir))
if batch_size is None:
batch_size = 1
assert nsamples % batch_size == 0

enc = encoder.get_encoder(model_name, models_dir)
hparams = model.default_hparams()
with open(os.path.join(models_dir, model_name, 'hparams.json')) as f:
hparams.override_from_dict(json.load(f))

if length is None:
length = hparams.n_ctx // 2
elif length > hparams.n_ctx:
raise ValueError("Can't get samples longer than window size: %s" % hparams.n_ctx)

with tf.Session(graph=tf.Graph()) as sess:
context = tf.placeholder(tf.int32, [batch_size, None])
np.random.seed(seed)
tf.set_random_seed(seed)
output = sample.sample_sequence(
hparams=hparams, length=length,
context=context,
batch_size=batch_size,
temperature=temperature, top_k=top_k, top_p=top_p
)

saver = tf.train.Saver()
ckpt = tf.train.latest_checkpoint(os.path.join(models_dir, model_name))
saver.restore(sess, ckpt)

while True:
raw_text = input("Model prompt >>> ")
while not raw_text:
print('Prompt should not be empty!')
raw_text = input("Model prompt >>> ")
context_tokens = enc.encode(raw_text)
generated = 0
for _ in range(nsamples // batch_size):
out = sess.run(output, feed_dict={
context: [context_tokens for _ in range(batch_size)]
})[:, len(context_tokens):]
for i in range(batch_size):
generated += 1
text = enc.decode(out)
print("=" * 40 + " SAMPLE " + str(generated) + " " + "=" * 40)
print(text)
print("=" * 80)

if name == 'main':
fire.Fire(interact_model)
J'ai donc édité le fichier avec Atom et j'ai simplement remplacé 124 par 345 à la ligne def interact_model(
model_name='124M',
J'ai enregistré le fichier puis je suis revenu dans le terminal pour lancer la commande :
(venv-gpt-2) Mac-mini:gpt-2 xorian$ python3 src/interactive_conditional_samples.py
mais le terminal me renvoie l'erreur :
Illegal instruction: 4
 
Arf, est ce que les indentations sont bien respectées ?
Bonjour Nanardtetard,
A priori je ne suis pas le seul à avoir ce problème et cela proviendrait de la version de numpy qui est utilisée. Voir ici https://github.com/conda/conda/issues/9678.
Je précise que je suis sur un mac mini 4.1 de 2011 sur lequel j'ai installé Mojave via le patch Dosdude
J'ai donc désinstallé numpy en faisant pip3 uninstall numpy. Puis j'en ai installé une plus ancienne en passant par pip3 install mais j'ai toujours la même erreur et visiblement il faut passer par conda et là il faut que j'essaye de comprendre comment ça marche pour installer conda proprement. Et après l'avoir installé faut il simplement réinstaller numpy via conda ou faut il tout reinstaller y compris Python ?
 
Es-tu sur que c'est le package numpy qui pose problème ?
-> Essaie d'executer ton fichier en commentant l'import et les utilisations de numpy. A priori il n'est utilisé que pour obtenir une valeur aléatoire.

Si une version précédente fonctionne, as-tu bien fait :
Bloc de code:
pip3 install numpy==x.y.z
Avec x.y.z la version qui fonctionnerait.
 
Es-tu sur que c'est le package numpy qui pose problème ?
-> Essaie d'executer ton fichier en commentant l'import et les utilisations de numpy. A priori il n'est utilisé que pour obtenir une valeur aléatoire.

Si une version précédente fonctionne, as-tu bien fait :
Bloc de code:
pip3 install numpy==x.y.z
Avec x.y.z la version qui fonctionnerait.
Oui j'ai bien fait pip3 install numpy==x.y.z
Et comment je fais pour commenter l'import et les utilisations de numpy ?
 
Pour commenter une ligne, il faut mettre le symbole # au debut de la ligne.
Ou """ pour commenter plusieurs lignes.

Exemple :
Bloc de code:
# Ceci est un commentaire
import os # Ceci est un commentaire
"""
Ceci un commentaire de
plusieurs
lignes
"""
 
Pour commenter une ligne, il faut mettre le symbole # au debut de la ligne.
Ou """ pour commenter plusieurs lignes.

Exemple :
Bloc de code:
# Ceci est un commentaire
import os # Ceci est un commentaire
"""
Ceci un commentaire de
plusieurs
lignes
"""
Je comprends pas à quoi ça sert de commenter le fichier car quand je vais l'exécuter via le terminal je ne verrais rien de plus ?
 
Je comprends pas à quoi ça sert de commenter le fichier car quand je vais l'exécuter via le terminal je ne verrais rien de plus ?
Je ne dis pas de commenter tout le fichier. Juste les parties qui pourraient poser problème pour justement identifier et localiser précisément le problème.

Sinon, tu peux installer Visual Studio Code avec les extensions pour Python, il a un bon debugger.